Python 字符串
1. 输出:格式化
2. 输入:input()
3. 索引和切片
4. 字符串常用方法
1. 输出:格式化
什么是字符串?
双引号或者单引号中的数据,就是字符串。
格式化方式一:format()
>>> print("我叫{},今年{}岁".format("xiaoming", 10)) # 自动排序 我叫xiaoming,今年10岁 >>> print("我叫{0},今年{1}岁,大家直接叫我{0}".format("xiaoming", 10)) # 手动排序 我叫xiaoming,今年10岁,大家直接叫我xiaoming
格式化方式二:格式符号(%)
1 >>> age = 10 2 >>> print("我今年%d岁" % age) 3 我今年10岁 4 >>> name = "xiaoming" 5 >>> print("我叫%s,今年%d岁" % (name, age)) 6 我叫xiaoming,今年10岁
常用格式符号:
格式符号 | 转换 |
---|---|
%s | 通过 str() 字符串转换来格式化 |
%d | 有符号十进制整数 |
%f | 浮点实数 |
%u | 无符号十进制整数 |
%o | 八进制整数 |
%x | 十六进制整数(小写字母) |
%X | 十六进制整数(大写字母) |
%e | 索引符号(小写'e') |
%E | 索引符号(大写“E”) |
%g | %f 和 %e 的简写 |
%G | %f 和 %E 的简写 |
示例:保留小数位与%进度
1 >>> print("%.2f" % 1) # 保留两位小数 2 1.00 3 >>> print("{:.1f}".format(1.16321)) # 保留一位小数 4 1.2 5 >>> print("%d%%" % 1) # 带上百分号 6 1%
2. 输入:input()
input() 函数能够完成从键盘获取数据,并保存到一个变量中,其获取的数据均为字符串类型。
input() 传参接受表达式,并把表达式的结果作为输出提示语。
- Python3:input()
- Python2:raw_input()
1 >>> a = input() 2 123 3 >>> a 4 123 5 >>> type(a) 6 <type 'str'> 7 8 >>> a = input() 9 "abc" 10 >>> a 11 'abc' 12 >>> type(a) 13 <type 'str'> 14 15 >>> input(1+1) 16 2 # 输出的提示语 17 '' # 未获取到键盘数据 18 >>> input("a"+"b") 19 ab 20 '' 21 >>> value=100 22 >>> input(value) 23 100 24 ''
3. 索引和切片
3.1 索引
所谓索引(下标),就是编号,通过编号能够找到相应的存储空间。
列表、元组支持索引操作,而字符串实际上就是字符的数组,所以也支持索引操作。
如下图所示,如果有字符串 name = 'abcdef'
,则在内存中的实际存储如下:
如果想取出部分字符,可以使用索引的方法(Python的索引从0开始)。
示例:
1 >>> a = "abcde" 2 >>> a[0] 3 'a' 4 >>> a[1] 5 'b' 6 >>> a[2] 7 'c'
3.2 切片
切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。
切片的操作语法:[起始位: 结束位: 步长]
- 其选取的区间为左闭右开型,即从“起始”位开始,到“结束”位的前一位结束(即不包括结束位本身)。
- 步长:每间隔多少位字符来取数,为正数时表示从左到右的顺序取数;步长为负数时表示从右到左的逆序取数。
示例:
>>> name = "abcdef" >>> name[0:2] # 取下标 0~2 的字符 'ab' >>> name[:3] # 取下标 0~3 的字符 'abc' >>> name[2:] # 取下标 2 之后的所有字符 'cdef' >>> name[1:-1] # 取下标 1~倒数第二位 的字符 'bcde' >>> name[3:1] # 当结束位大于起始位时 '' >>> name[3:1:-1] # 当结束位大于起始位时,使用负数步长 'dc' >>> name[::2] # 从左到右每隔两位取数 'ace' >>> name[::-2] # 从右到左每隔两位取数 'fdb' >>> name[::-1] # 反转字符串 'fedcba'
4. 字符串常用方法
注意,由于字符串是不可变类型,以下函数的操作均会返回一个新的字符串对象,而不会改变原变量引用的值。
find():mystr.find(str, start, end) 检查str在索引(start和end)之间是否包含在mystr中,如果是,则返回str开始的索引;若不包含则返回-1。
- rfind():类似于find(),只不过是从右边开始查找。
- index():跟find()用法一样,只不过若不包含,则返回异常。
- rindex():类似于index(),只不过是从右边开始查找。
- count():mystr.count(str, start, end) 返回str在索引(start和end)之间在mystr中出现的次数。
- replace():
mystr.replace(str1, str2, count) 将mystr中的str1替换成str2 ,若count指定,则替换不超过count次。
- split():mystr.split(str=" ", maxsplit) 以str为分隔符来切片mystr并返回列表,如果maxsplit指定,则仅分隔maxsplit个子字符串。
- splitlines():mystr.splitlines([int]) 以换行符为分隔符来切片mystr并返回列表,若传入非0参数则表示元素带上换行符。
- capitalize():mystr.capitalize() 把mystr的首个字符变成大写。
- title():把字符串的每个单词首字母变成大写。
- istitle():mystr.istitle() 检测字符串mystr中所有的单词首字母是否为大写字母,其他为小写字母,若是则返回True;否则返回False。
- startswith():mystr.startswith(str) 检查mystr是否以str开头,若是则返回True,反之返回False。
- endswith():mystr.endswith(str) 检查mystr是否以str结尾,若是则返回True,反之返回False。
- lower():mystr.lower() 将mystr中所有大写字母变成小写。
- upper():mystr.upper() 将mystr中所有小写字母变成大写。
- islower():mystr.islower() 如果mystr中所有的字母都是小写,若是则返回True;否则返回False。
- isupper():mystr.isupper() 如果mystr中所有的字母都是大写,若是则返回True;否则返回False。
- swapcase():mystr.swapcase() 将mystr中的大写字母变成小写,小写字母变成大写。
- ljust():mystr.ljust(width) 返回一个(原字符串左对齐,并使用空格填充至长度为width的)新字符串。
- rjust():mystr.rjust(width) 返回一个(原字符串右对齐,并使用空格填充至长度为width的)新字符串。
- center():mystr.center(width) 返回一个(原字符串居中,并使用空格填充至长度为width的)新字符串。
- lstrip():mystr.lstrip() 删除mystr左边的空白字符。
- rstrip():mystr.rstrip() 删除mystr右边的空白字符。
- strip():mystr.strip() 删除mystr左右两边的空白字符。
- partition():mystr.partition(str) 把mystr以str分割为三个部分(str前、str、str后)作为元素来返回一个元组。
- rpartition():类似于partition(),只不过是从右边开始。
- isalpha():mystr.isalpha() 如果mystr所有字符都是字母和中文,则返回True,反之返回False。
- isdigit():mystr.digit() 如果mystr所有字符都是数字,则返回True,反之返回False。
- isalnum():mystr.isalnum() 如果mystr所有字符都是字母或数字,则返回True,反之返回False。
- isspace():mystr.isspace() 如果mystr只包含空格,则返回True,反之返回False。
- join():mystr.join(seq) 在序列seq(字符串、列表、元组、字典、集合、字典)的每个元素之间插入str,返回一个新的字符串。
- maketrans():str.maketrans(str1, str2) 将str1和str2的字符一一对应,返回字典。
- translate():mystr.translate(dict) 配合传入str.maketrans()返回的字典参数,根据字典的键值对映射规则将mystr中的字符进行一一替换。
示例:
1 >>> mystr = "my name is xiaoming.." 2 >>> mystr.find("name") 3 3 4 >>> mystr.find("name", 10, -1) 5 -1 6 >>> 7 >>> mystr.index("name") 8 3 9 >>> mystr.index("an") 10 Traceback (most recent call last): 11 File "<stdin>", line 1, in <module> 12 ValueError: substring not found 13 14 >>> mystr.rfind(" ") 15 10 16 >>> mystr.rindex(" ") 17 10 18 19 >>> mystr.count("i") 20 3 21 >>> mystr.count("i", 10, -1) 22 2 23 24 >>> mystr.replace(" ", "_", 1) 25 'my_name is xiaoming..' 26 >>> mystr.replace("_", " ") 27 'my name is xiaoming..' 28 29 >>> mystr.split(" ") 30 ['my', 'name', 'is', 'xiaoming..'] 31 >>> mystr 32 'my name is xiaoming..' 33 >>> mystr.split(" ", 2) 34 ['my', 'name', 'is xiaoming..'] 35 36 >>> mystr.capitalize() 37 'My name is xiaoming..' 38 >>> mystr.title() 39 'My Name Is Xiaoming..' 40 41 >>> mystr.replace(" ", "_") 42 'my_name_is_xiaoming..' 43 44 >>> mystr.startswith("my") 45 True 46 >>> mystr.endswith("..") 47 True 48 49 >>> mystr.upper() 50 'MY NAME IS XIAOMING..' 51 >>> mystr.upper().lower() 52 'my name is xiaoming..' 53 54 >>> mystr.ljust(30) 55 'my name is xiaoming.. ' 56 >>> mystr.rjust(30) 57 ' my name is xiaoming..' 58 >>> mystr.center(30) 59 ' my name is xiaoming.. ' 60 61 >>> mystr.ljust(30).rstrip() 62 'my name is xiaoming..' 63 >>> mystr.rjust(30).lstrip() 64 'my name is xiaoming..' 65 >>> mystr.center(30).strip() 66 'my name is xiaoming..' 67 68 >>> mystr.rpartition("i") 69 ('my name is xiaom', 'i', 'ng..') 70 >>> mystr.partition("i") 71 ('my name ', 'i', 's xiaoming..') 72 >>> "my\nname\nis".splitlines() 73 ['my', 'name', 'is'] 74 75 >>> "abc".isalpha() 76 True 77 >>> "中文".isalpha() 78 True 79 >>> "123".isdigit() 80 True 81 >>> "a1b2".isalnum() 82 True 83 >>> " ".isspace() 84 True 85 86 >>> ".".join(mystr) # 处理对象可为字符串、列表、元组 87 'm.y. .n.a.m.e. .i.s. .x.i.a.o.m.i.n.g....' 88 >>> li = ["my", "name", "is"] 89 >>> "_".join(li) 90 'my_name_is' 91 92 >>> "aB".swapcase() 93 'Ab' 94 95 >>> "1\r\n2\n3".splitlines() 96 ['1', '2', '3'] 97 >>> "1\n2\n3\n".splitlines() 98 ['1', '2', '3'] 99 >>> "1\n2\n3\n".splitlines(1) # 若传入非0参数:表示保留\n 100 ['1\n', '2\n', '3\n'] 101 102 # 1对应a,2对应b,3对应c 103 >>> map = str.maketrans('123', 'abc') # {49: 97, 50: 98, 51: 99} 104 >>> s = '54321123789' 105 >>> s.translate(map) 106 '54cbaabc789'