字符串(str)在 Python 中用于表示文本:字符按顺序排列,可通过下标与切片访问其中一段。本节说明字面量写法、正负下标与切片规则、不可变性的含义,以及拼接、重复、f-string 格式化与常见成员判断,为下一篇字符串方法打基础。
与列表不同,字符串创建后不能对单个字符原地赋值。若需修改内容,应通过拼接或切片生成新的 str 对象。
定义字符串
单引号、双引号与三引号均可界定字符串,语义等价,三引号适合书写跨行文本:
s1 = 'hello'
s2 = "hello"
s3 = """跨行的
字符串"""
print(s1, s2)
print(s3)下标访问
正下标从 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 表示从开头起,省略 表示至末尾,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,在大括号内写变量或表达式:
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试着练切片
读入一个字符串,用切片输出其逆序,并统计长度与元音字母个数。
本节说明了 Python 中字符串的定义、下标与切片、不可变性及基本格式化。下一篇介绍字符串方法:查找、替换、拆分与字符类别判断等接口。