string
关于String的详细笔记
a = 'hello'
b = "good"
c = """ 哈哈哈 """
d = ''' 呵呵呵 '''
str1 = 'OK' # OK
str2 = "OK" # OK
str3 = '''I'm OK.''' # I'm OK.
str4 = """哈哈哈""" # 哈哈哈
str4 = "I'm ok." # I'm ok.
str5 = 'I\'m ok.' # I'm ok.
str6= "I\"m ok." # I"m ok.
str7 = 'I"m ok.' # I"m ok.
str8 = """I'm "Iron Man".""" # I'm "Iron Man".
str9 = r'ab\ncd' # ab\ncd
str0 = R'ab\ncd' # ab\ncd
str_1 = '''这是一个段落,所以可以直接换行,不需反斜杠来声明语句未结束
直到遇到下一个三单引号,才认为结束
但是换行会跟着换行,空格会跟着空格'''
"""
str_1输出为:
这是一个段落,所以可以直接换行,不需反斜杠来声明语句未结束
直到遇到下一个三单引号,才认为结束
但是换行会跟着换行,空格会跟着空格
"""
\n 换行 \t 缩进
# 使用转义字符
str_2 = 'ab\ncd'
'''
str_2输出为:
ab
cd
'''
r'字符串' 表示不转义
# 不转义
str_3 = r'ab\ncd' # ab\ncd
转义字符 | 描述 |
---|---|
\ | 续行符 |
\ | 反斜杠 |
\' | 单引号 |
\" | 双引号 |
\a | 响铃 |
\b | 退格 |
\e | 转义 |
\000 | 空 |
\n | 换行 |
\v | 纵向制表符 |
\t | 横向制表符 |
\r | 回车 |
\f | 换页 |
\o | 八进制 |
\x | 十六进制 |
下标¶
查找 find、index、rfind、rindex¶
s.find(sub[, start[, end]) -> int s.rfind(sub[, start[, end]) -> int s.index(sub[, start[, end]) -> int s.rindex(sub[, start[, end]) -> int
没r找第一个,有r找最后一个 find找不到返回-1,index找不到报错
s = 'abcdefghijkl abundance gg'
print(s.find('g')) # 返回字符串中第一个 g 的下标:6
print(s.find('z')) # 找不到则返回 -1
print(s.index('g')) # 返回字符串中第一个 g 的下标:6
print(s.index('z')) # 找不到则报错
print(s.rfind('g')) # 返回字符串中最后一个 g 的下标:24
print(s.rfind('z')) # 找不到则返回 -1
print(s.rindex('g')) # 返回字符串中最后一个 g 的下标:24
print(s.rindex('z')) # 找不到则报错
判断¶
方法名 | 描述 |
---|---|
startswith(value) | 判断是否以 value 开始 |
endswith(value) | 判断是否以 value 结束 |
isalpha() | 判断是否全是字母 |
isdigit() | 判断是否全是数字 |
isalnum() | 判断是否全是字母或数字或字母+数字 |
isdecimal() | 判断是否全是浮点数 |
isnumeric() | 判断是否全是数值 |
islower() | 判断是否全小写 |
isupper() | 判断是否全大写 |
isspace() | 判断是否全空格或\t或\n或\r |
istitle() | 判断是否所有单词都是首字母大写 |
isdigit() VS isdecimal() VS isnumeric()¶
isdigit() True: Unicode数字,byte数字(单字节),全角数字(双字节),罗马数字 False: 汉字数字 Error: 无
isdecimal() True: Unicode数字,,全角数字(双字节) False: 罗马数字,汉字数字 Error: byte数字(单字节)
isnumeric() True: Unicode数字,全角数字(双字节),罗马数字,汉字数字 False: 无 Error: byte数字(单字节)
计数 count¶
s.count(sub[, start[, end]) -> int
替换 replace¶
s.replace(old, new[, count]) -> str 替换字符串中指定的内容,如果指定次数count, 则替换不会超过count次。
s = 'abcdefghijkl abundance gg'
print(s.replace('g', '*')) # abcdef*hijkl abundance **
print(s.replace('g', '*', 2)) # abcdef*hijkl abundance *g
分割 split、rsplit、partition、rpartition、splitlines¶
s.split(sep[, maxsplit]) -> list[str]
:按 sep 分割,从左边开始,只分割两次s.rsplit(sep[, maxsplit]) -> list[str]
:按 sep 分割,从右边开始,只分割两次s.patition(sep) -> tuple(str, str, str)
:按 sep 分割,从左边开始,分成 (前部,分割符号,后部)s.rpartition(sep) -> tuple(str, str, str)
:按 sep 分割,从右边开始,分成 (前部,分割符号,后部)
s1 = 'Alice,Boii,Candy,Dannis,Eva,Fiona'
print(s1.split(',')) # ['Alice', 'Boii', 'Candy', 'Dannis', 'Eva', 'Fiona']
print(s1.split(',', 2)) # ['Alice', 'Boii', 'Candy,Dannis,Eva,Fiona']
print(s1.rsplit(',', 2)) # ['Alice,Boii,Candy,Dannis', 'Eva', 'Fiona']
s2 = '2020.8.8拍摄.mp4'
print(s2.partition('.')) # ('2020', '.', '8.8拍摄.mp4')
print(s2.rpartition('.')) # ('2020.8.8拍摄', '.', 'mp4')
s.splitlines([keepends]) -> list[str]
:按换行符(\n,\r,\r\n)分割 keepends -- 在输出结果里是否保留换行符('\r', '\r\n', \n'),默认为 False,不包含换行符,如果为 True,则保留换行符。
str1 = 'ab c\n\nde fg\rkl\r\n'
print(str1.splitlines()) # ['ab c', '', 'de fg', 'kl']
str2 = 'ab c\n\nde fg\rkl\r\n'
print(str2.splitlines(True)) # ['ab c\n', '\n', 'de fg\r', 'kl\r\n']
切片¶
从字符串里截取一段指定的内容,生成一个新的字符串 切片都是**包头不包尾**
具体参考 高级特性->切片
转换大小写¶
s = 'hello woRlD.good mornIng'
# 将第一个字符转成大写,其他字符转成小写
print(s.capitalize()) # Hello world.good morning
# 将全部字符转成大写
print(s.upper()) # HELLO WORLD.GOOD MORNING
# 将全部字符转成小写
print(s.lower()) # hello world.good morning
# 将每个单词首字母转成大写
print(s.title()) # Hello World.Good Morning
填充¶
s.ljust(weight, fillchar='') -> str
s.rjust(weight, fillchar='') -> str
s.center(weight, fillchar='') -> str
不足 weight 的话,用 fillchar 填充,fillchar默认空格
print('|' + 'Monday'.ljust(10) + '|') # |Monday |
print('|' + 'Monday'.ljust(10, '^') + '|') # |Monday^^^^|
print('|' + 'Monday'.rjust(10) + '|') # | Monday|
print('|' + 'Monday'.rjust(10, '#') + '|') # |####Monday|
print('|' + 'Friday'.center(20, '*') + '|') # |*******Friday*******|
print('|' + 'Friday'.center(4, '*') + '|') # |Friday|
修剪¶
s.lstrip(chars) -> str
s.rstrip(chars) -> str
s.strip(chars) -> str
删除字符串 左边 / 右边 / 左边+右边 的 chars 字符
print('|' + ' Couldy Sunny '.lstrip() + '|') # |Couldy Sunny |
print('|' + ' Couldy Sunny '.rstrip() + '|') # | Couldy Sunny|
print('|' + ' Couldy Sunny '.strip() + '|') # |Couldy Sunny|
print('|' + ' Couldy+Sunny+++'.lstrip('+') + '|') # | Couldy+Sunny+++|
print('|' + ' Couldy+Sunny+++'.rstrip('+') + '|') # | Couldy+Sunny|
print('|' + ' Couldy+Sunny+++'.strip('+') + '|') # | Couldy+Sunny|
拼接¶
s.join(iterable) -> str
将 s 拼接到 iterable 的每一个元素上
li = ['Alice', 'Boii', 'Candy', 'Dannis', 'Eva', 'Fiona']
print(' - '.join(li)) # Alice - Boii - Candy - Dannis - Eva - Fiona
print('+'.join('Hello')) # H+e+l+l+o
dic = {'name1': 'Alice', 'name2': 'Boii'}
print(' - '.join(dic)) # name1 - name2
编码¶
- ASCII 0~127共128个,占用 1byte 即 8bit 的长度,共使用了7位的长度,从0000 0000 到 0111 1111。 48-57 -> 0-9,65-90 -> A-Z,97-122 -> a-z
- ISO-8859-1 0~255共256个,占用 1byte 即 8bit 的长度,共使用了8位的长度,从 0000 0000到1111 1111。 0127与ASCII完全兼容,128255是一些欧洲字母
- Unicode 万国码,汉字每个占 3byte
- GBK 国标扩,汉字每个占 2byte
长度¶
格式化¶
不可变性¶
字符串是不可变对象。
当执行一个 str = 'abc'
的语句时,
python在字符串池中创建了一个字符串 'abc'
,
然后在内存中创建一个变量 str
指向字符串池中的 'abc'
如果对str
进行修改 str = 'xyz'
python会在字符串池中再创建一个字符串 'xyz'
,
然后让变量 str
指向字符串池中的 'xyz'
此时字符串池其实有 'abc'
和 'xyz'
,只不过'abc'
没有被指向, 'xyz'
被str
指向
所以,对于不变对象来说, 调用对象自身的任意方法,也不会改变该对象自身的内容。 相反,这些方法会创建新的对象并返回 这样,就保证了不可变对象本身永远是不可变的。