Python字符串(str)用来存放文本,单引号、双引号、三引号都能定义,内容按字符序列排列,可以用下标和切片取出其中一段。

和列表不同,字符串创建后不能改某个位置上的字符,想改内容只能拼出新的字符串。

定义字符串

三种引号写法等价,三引号适合跨越多行:

s1 = 'hello'
s2 = "hello"
s3 = """跨行的
字符串"""
print(s1, s2)
print(s3)

下标访问

下标从 0 开始,负数从右边数,-1 是最后一个字符:

P 0 / -6 y 1 / -5 t 2 / -4 h 3 / -3 o 4 / -2 n 5 / -1 name = "Python":正下标从 0 数,负下标从 -1 往左数
name[0] 取到 P,name[-1] 取到 n;负下标就是从右边数,-1 是最后一个字符。
name = "Python"
print(name[0])    # P
print(name[1])    # y
print(name[-1])   # n,负下标从右往左数
print(name[-2])   # o

切片 [start:stop:step]

切片取出子串,规则是含头不含尾。省略 start 表示从开头,省略 stop 表示到末尾,step 为负时可用来反转:

s = "Hello World"
print(s[0:5])     # Hello(0 到 4)
print(s[:5])      # Hello(start 省略从 0 开始)
print(s[6:])      # World(stop 省略到末尾)
print(s[::2])     # HloWrd(隔一个取一个)
print(s[::-1])    # dlroW olleH(反转)

字符串是不可变的

对某个下标直接赋值会触发 TypeError,常见做法是切片重组,或重新赋值给变量:

s = "Hello"
# s[0] = "J"    # TypeError,不能这样改

s = "J" + s[1:]  # 重新拼一个
print(s)         # Jello

常用操作

text = "  hello world  "

print(len(text))          # 16,含两头的空格
print(text.strip())       # "hello world",去掉首尾空白
print(text.upper())       # "  HELLO WORLD  "
print(text.lower())       # "  hello world  "
print("hello" in text)    # True,成员判断
print(text.replace("world", "python"))  # "  hello python  "

拼接与重复

a = "Py"
b = "thon"
print(a + b)        # Python
print(a * 3)        # PyPyPy
print(", ".join(["a", "b", "c"]))  # a, b, c

格式化:f-string

Python 3.6 起推荐用 f-string:在引号前加 f,大括号里写变量或表达式:

Python f-string 格式化输出示例运行
name = "小明"
age = 20
print(f"你好,{name},明年{age + 1}岁")

score = 88.5
print(f"成绩:{score:.1f}")   # 成绩:88.5

检查与判断

s = "abc123"
print(s.isalnum())    # True,全字母数字
print("123".isdigit())  # True,全数字
print("abc".isalpha())  # True,全字母
print("Abc".isupper())  # False

试着练切片

输入一个字符串,用切片输出它的反转版本,再统计长度和元音字母个数。