Skip to content

字符串

字符串是一段文字,类型是 str。用单引号或双引号包起来都可以。

s1 = "hello"
s2 = 'jeapedu'
print(s1, s2)
print(type(s1))
hello jeapedu
<class 'str'>

Python 3 默认 UTF-8,可以直接写中文。字符串是只读的:能取出某一个字符、切出一段、拼出新的,但不能改原来那个位置上的字。

常用方法(split、strip、find 等)放在下一节 字符串函数。这一节先把写法、下标、拼接和切片练熟。

三种写法

单引号、双引号没有功能差别。里面要出现同一种引号时,换另一种,或加反斜杠:

print("It's easy")
print('他说:"你好"')
print('It\'s easy')
It's easy
他说:"你好"
It's easy

第一行用双引号包起来,里面的单引号可以直接写。第二行反过来,用单引号包起来,里面的双引号可以直接写。第三行和第一行打印结果一样,单引号前面的 \ 只是告诉 Python:这个 ' 是文字,不是字符串的结尾。

三引号可以写多行:

text = """第一行
第二行"""
print(text)

前面加 r 表示原始字符串,反斜杠不再当转义,后面正则会用到:

print(r"C:\new\test")

下标:取出某一个字符

下标从 0 开始。-1 是最后一个,-2 是倒数第二个。

s = "abcdef"

print(s[0])
print(s[3])
print(s[-1])
print(s[-2])
a
d
f
e

下标超出长度会报 IndexError:

print(s[10])

字符串不能按位置修改

s = "abcdef"
s[0] = "1"
TypeError: 'str' object does not support item assignment

这不是写错了变量名,而是字符串本身不允许改其中某一个字符。要「改」,只能拼出一条新的:

s = "abcdef"
s2 = "1" + s[1:]
print(s2)
1bcdef

s 还是原来的 abcdef,s2 才是新字符串。

拼接和重复

+ 把两段文字接起来。* 把同一段重复若干次。

print("jeape" + "du")
print("ha" * 3)

name = "Ana"
print("你好," + name)
jeapedu
hahaha
你好,Ana

字符串不能直接和数字相加,会报 TypeError。先转成字符串,或用 f-string:

n = 3
print("第" + str(n) + "课")
print(f"第{n}课")
第3课
第3课

f"..." 在 变量 里已经用来控制小数位。这里同样可以把变量嵌进文字。

长度和包含

len(s) 是字符个数。in 判断一段是否出现在里面。

s = "hello"
print(len(s))
print("ell" in s)
print("xyz" in s)
5
True
False

中文一个字也占一个下标:len("你好") 是 2。

切片:取出一段

切片写法是 s[起点:终点]。包含起点,不包含终点。和列表、元组的写法一样,切片 一节会再汇总。

s = "abcdefghijkl"

print(s[1:5])
print(s[:5])
print(s[5:])
print(s[:])
bcde
abcde
fghijkl
abcdefghijkl

起点不写表示从开头,终点不写表示到末尾。终点写得比长度大,也只取到尾巴,不会报错。

第三个参数是步长:隔几个取一个。步长为 -1 可以从后往前。

print(s[0:5:2])
print(s[::-1])
ace
lkjihgfedcba

s[::-1] 是把整串倒过来,很常用。步长、反序的细节见 切片。

转义字符

反斜杠表示特殊字符:

写法 含义
\n 换行
\t 制表符(对齐用的空格)
\\ 一个真正的反斜杠
\' \" 引号本身
print("第一行\n第二行")

路径里的 \ 容易踩坑,Windows 路径建议写成 r"C:\Users\name",或用正斜杠。

综合例子

s = "abcdef"

print(s[0], s[-1])
print("jeape" + "du")
print(s[1:5])
print(len(s), "cd" in s)
print(f"{s} 的长度是 {len(s)}")
a f
jeapedu
bcde
6 True
abcdef 的长度是 6

拆开、去空格、查找、替换,见下一节 字符串函数。

用 python examples/string_demo.py 运行本节的例子。