一、字符串的 “花式” 写法
Python 里字符串不只有一种写法,不同场景用不同引号会更方便:
- 单双引号互嵌
如果字符串里本身就有引号,直接用另一种引号包起来就行,不用转义!
比如想输出 She said, 'Hello!',直接写:
s1 = "She said, 'Hello!'"
print(s1)
- 三重引号:多行字符串神器
想写一段带换行的文本?用 ''' 或者 """ 把内容包起来,换行符会被自动保留,不用手动加 \n:
s2 = """User:
Name: Alice
ID: 101"""
print(s2)
输出的时候会原样保留换行,特别适合写长文本或者多行注释。
- 字面值合并:拆分长字符串更清晰
如果字符串太长一行写不下,可以把它拆成好几段,Python 会自动把相邻的字符串合并成一个:
s3 = "Python is " "very" " fun."
print(s3) # 输出:Python is very fun.
中间可以加空格或者换行,不影响最终结果,代码看起来更整洁。
二、转义字符与原始字符串
- “讨厌的反斜杠"可以用原始字符串解决
普通字符串里 \ 是转义字符,比如 \n 代表换行,\t 代表制表符。但写 Windows 文件路径或者正则表达式时,我们希望 \ 就是普通的反斜杠,这时候就用原始字符串:在引号前加个 r 就行。
对比一下:
# 普通字符串:要写两个反斜杠才能表示一个\
path1 = "C:\\Users\\new_folder"
# 原始字符串:直接写\就可以
path2 = r"C:\Users\new_folder"
print(f"Normal: {path1}")
print(f"Raw: {path2}")
输出结果是一样的,但原始字符串写法更直观!
注意:原始字符串末尾不能是奇数个反斜杠,不然会报错。
- 竞赛里的制表符 \t
课上老师特意说,竞赛里几乎不会遇到 \t,而且格式化对齐输出尽量用 f-string,别用制表符,不然不同环境下对齐会乱掉。
三、字符串常用操作方法
- 大小写转换
Python 给了好几个方法,能快速改变字符串大小写:
.upper():全转大写
.lower():全转小写
.swapcase():大小写互换
举个例子:
s = "heLLo, pyTHon 123!"
print(f"upper: {s.upper()}") # 输出 HELLO, PYTHON 123!
print(f"lower: {s.lower()}") # 输出 hello, python 123!
print(f"swapcase: {s.swapcase()}") # 输出 HEllO, PYtHOn 123!
数字和符号不会被改变,只会处理字母。
- 去除空白字符
处理用户输入或者文件数据时,经常要去掉字符串前后多余的空格、换行符:
.strip():去掉前后所有空白
.lstrip():只去掉开头的空白
.rstrip():只去掉结尾的空白
s = " hello, world! "
print(f"strip: '{s.strip()}'") # 输出 'hello, world!'
print(f"lstrip: '{s.lstrip()}'") # 输出 'hello, world! '
print(f"rstrip: '{s.rstrip()}'") # 输出 ' hello, world!'
还可以指定要去除的字符,比如 .strip('!') 就能去掉前后的感叹号。
- 查找与替换
想在字符串里找东西或者替换内容,用这些方法:
.find(sub):找子字符串,找到返回索引,找不到返回 -1
.index(sub):和 find 类似,但找不到会报错
.replace(old, new):把旧子串替换成新子串
.count(sub):统计子串出现的次数
print(s.find("world")) # 输出 7
print(s.replace("world", "Python")) # 输出 hello, Python!
print(s.count("l")) # 输出 3
- 分割与连接
把字符串拆成列表,或者把列表拼成字符串,是很常见的操作:
.split(sep):用分隔符 sep 把字符串切成列表
sep.join(iterable):用分隔符把可迭代对象(比如列表)拼成字符串
s = "apple,banana,cherry"
words = s.split(',') # 得到 ['apple', 'banana', 'cherry']
new_s = "-".join(words) # 得到 "apple-banana-cherry"
- 字符类型检查
想判断字符串是不是全小写、全大写,或者是不是空白字符?用这些方法:
.islower():判断是否全小写(至少有一个字母)
.isupper():判断是否全大写(至少有一个字母)
.isspace():判断是否只包含空白字符
print('python123'.islower()) # True
print('PYTHON123'.isupper()) # True
print(' '.isspace()) # True
四、字符串不可变性:不能直接改字符!
这里踩过坑!Python 的字符串是不可变的,不能像列表那样直接改某个位置的字符:
s = "hello"
s[0] = 'H' # 会报错 TypeError!
想修改的话,要先转成列表,改完再拼回去:
s = "hello"
temp_list = list(s)
temp_list[0] = 'H'
new_s = "".join(temp_list) # 得到 "Hello"
这个套路在竞赛里很常用,一定要记住
五、子字符串检查
用 in 和 not in 可以快速判断一个字符串是否包含另一个:
s = "hello, world!"
print('world' in s) # True
print('spam' not in s) # True
注意:字符串的 in 是检查子字符串,和列表检查独立元素不一样,比如 'ell' in 'hello' 是 True,但列表里 'ell' in ['h','e','l','l','o'] 就是 False。
六、总结
这节课学的字符串知识点还挺多的,从基础写法到各种方法,感觉字符串是 Python 里很灵活的一部分。刚开始容易搞混转义字符和原始字符串,还有字符串不可变性的坑,多写几个例子就熟啦
浙公网安备 33010602011771号