目录
-
字符串
字符串基本介绍
Python 中字符的基本类型是字符串。
编码是 16 位的 Unicode 编码,ASCII 码是它的子集。可以表示所有的字符。
>>> ord('A') # ord() 可以把任一字符转化为对应得实际值数
65
>>> chr(66) # chr() 可以把任意的十进制数字转化为对应的字符
'B' # 括号里面不能加引号
>>> chr('65')
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
chr('65')
TypeError: an integer is required (got type str)
字符串的创建
>>> a = 'abcd' # 字符串的创建可以用单引号,也可以双引号
>>> a
'abcd'
>>> b = "I'm a student!" # 注意,如果字符串中有引号,使用和其不相同的
>>> b
"I'm a student!"
>>> resume = '''name = "Tom" # 创建多行字符串,用三个单引号或双引号
age = 15
company = "CCNU"'''
>>> resume
'name = "Tom"\nage = 15\ncompany = "CCNU"'
>>> c= '' # Python 中允许有空字符串,不能有空格
>>> len(c) # len() 用于检查字符串长度
0
>>> d = ' ' # 空格长度也算
>>> len(d)
1
转义字符
>>> a = 'I\'am a student' # \\ \' \" 在字符串中表示 \ ' "
>>> a
"I'am a student" # \n 换行 \ 续行符
字符串拼接
>>> a = 'aaa' + 'bbb' # 字符储拼接的两种方式
>>> a
'aaabbb'
>>> b = 'aaa''bbb'
>>> b
'aaabbb'
字符串复制
>>> a = 'Abc' * 3 # 字符串的复制
>>> a
'AbcAbcAbc'
打印不自动换行
Python 中 print 末尾自动换行
>>> print('ddd', end='###' ) # 使用 end= 来代替末尾的换行符
ddd###
>>> print('ddd', end="###")
ddd###
字符串的键盘输入
>>> my_name = input("Your name is ")
Your name is Luyaoyi
>>> my_name
'Luyaoyi'
将数字转化为字符串
>>> str(132)
'132'
字符串中某一位的表示
>>> a = 'abcdefghijklmnopqrstuvwxyz'
>>> a[0] # 正向,类似于 C 中的数组
'a'
>>> a[-26] # 反向,注意右边第一个字符的位置是 -1
'a'
>>> a[-27]
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
a[-27]
IndexError: string index out of range
字符串的替换
>>> a = 'abcd'
>>> a = a.replace("c","m")
>>> a
'abmd'
Python 中不支持改变已经定义的字符串,这里的替换是指 生成了一个新的对象 abmd ,然后 a 指向新的对象
>>> a[3] = '5'
Traceback (most recent call last):
File "<pyshell#25>", line 1, in <module>
a[3] = '5'
TypeError: 'str' object does not support item assignment
提取子字符串
>>> a = 'abcdefg'
>>> a[:] # 提取全部字符串
'abcdefg'
>>> a[1:5] # 提取 a[1] 到 a[5] 但不包括 a[5] 的字符串,包头不包尾
'bcde'
>>> a[1:5:2] # 步长为 2 取字符
'bd'
>>> a[:2] # 从头开始到第二个数
'ab'
>>> a[2:] # 从第二个数开始到最后
'cdefg'
>>> a[:-3] # 负值时和上面一样
'abcd'
>>> a[-5:-2]
'cde'
>>> a[::-1] # 逆向提取
'gfedcba'
>>> a[:400] # 超过范围不会报错
'abcdefg'
字符串的分割与合并
>>> a = 'to be or not to be'
>>> a.split() # 将空格指定为分割符,存储到列表中
['to', 'be', 'or', 'not', 'to', 'be']
>>> a.split("to") # 将 to 指定为分隔符
['', ' be or not ', ' be']
>>> a = ["aaa", "bbb", "ccc"]
>>> '#'.join(a) # 用冒号中的符号拼接列表 a 中的不同对象
'aaa#bbb#ccc' # 相比于加号,更推荐这一种方式
字符串驻留机制
字符串中仅包含 _ ,数字,字母时,启动驻留机制,即两个不同的变量会引用同一个对象
>>> a = 'a_aa'
>>> b = 'a_aa'
>>> a is b
True
>>> a = 'a#b'
>>> b = 'a#b'
>>> a is b
False
检测字符是否在字符串中
>>> a = 'abcde'
>>> 'a' in a
True
>>> 'ddd' not in a
True
字符串的格式化
# 第一种,需要按顺序,这里的 {} 作为占位符
>>> a = 'my name is {0}, my age is {1}, {0} is a good boy!'
>>> a.format("Lu",25)
'my name is Lu, my age is 25, Lu is a good boy!'
# 第二种,不用在意顺序
>>> a = 'my name is {name}, my age is {age}, {name} is a good boy!'
>>> a.format(age = 25, name = 'Lu')
'my name is Lu, my age is 25, Lu is a good boy!'
# 更多细节,冒号后面增加填充对齐命令
# ^ 居中 < 左对齐 > 右对齐
# 冒号后第一位表示填充字符,只能有一位,第二位表示对齐方式,第三位表示显示长度
>>> a = 'my name is {0:*^8}, my age is {1}'
>>> a.format("Lu",25)
'my name is ***Lu***, my age is 25' # 8位字符,* 号填充,居中显示
可变字符串
# io 的使用
>>> import io
>>> b = io.StringIO(a) # 注意大小写
>>> b.getvalue() # 输出新的字符串
'abcdefg'
>>> b.seek(3) # 定位到 b[3]
3
>>> b.write('m') # 把 b[3] 变成 m
1
>>> b.getvalue()
'abcmefg'
其他操作
>>> a = 'abcdefg'
>>> len(a) # 长度
7
>>> a.startswith('a') # 判断是否以某些字符开头
True
>>> a.startswith('abc')
True
>>> a.endswith('d') # 是否以某些字符结尾
False
>>> a.find('b') # 第一次出现某字符的位置
1
>>> a = 'aabbccbb'
>>> a.rfind('b') # 最后一次出现某字符的位置
7
>>> a.count('b') # 测试某字符出现次数
4
>>> a.isalnum() # 测试是不是全是字母和数字
True
>>> a = ' *aaa* '
>>> a.strip() # 去除首尾括号中的字符,括号中没有元素代表空格
'*aaa*'
>>> a.strip("*") # a 所引用的对象没有改变
' *aaa* '
>>> a = '*abc*'
>>> a.lstrip('*') # 去除左边的 *
'abc*'
>>> a.rstrip('*') # 去除右边的 *
'*abc'
>>> a = 'aa BB cc'
>>> a.capitalize() # 首字母大写,别的全小写
'Aa bb cc'
>>> a.title() # 每个单词首字母大写,别的小写
'Aa Bb Cc'
>>> a.upper() # 每个字母都大写
'AA BB CC'
>>> a.lower() # 每个字母都小写
'aa bb cc'
>>> a.swapcase() # 大变小,小变大
'AA bb CC'
>>> a = 'aaa'
>>> a.center(10, '*') # 字符串变为十个字符用 * 填充,居中显示
'***aaa****'
>>> a.center(10) # 空格填冲,居中显示
' aaa '
>>> a.ljust(10, '*') # 左对齐
'aaa*******'
>>> a.rjust(10, '*') # 右对齐
'*******aaa'
a.isalnum() a是否为字母或数字
a.isalpha() a是否全字母(包括汉字)
a.isdigit() a是否全数字
a.isspace() a是否为空白符
a.isupper() a是否全大写
a.islower() a是否全小写