Python 字符串操作
python2与python3中的字符串
在编程语言中,几乎90%的操作都是和字符串和整数在打交道,在python中字符串也是一种基础数据类型。
在早期的python2中,字符串与内置数据类型bytes是同一种东西,实际上python2中的字符串就是bytes。
而在python3中后,为了解决python2令人头疼的编码问题,python3的字符串就实际上是unicode字符串了,在python中有unicode的类型,在python中就取消unicode类型了,但实际上python3中的字符串就是unicode字符。
由于unicode中是包含中文,所以解释器能成功显示出中文,而python2中的默认编码是ascii码,默认是无法识别的,而python2中的字符串就是bytes,所以以二进制的方式显示。
字符串切片
在说切片前,要说一下索引这个东西,python有很多数据类型跟索引是息息相关的,字符串,列表,元组这些都有索引,我们可以使用索引对数据进行我们想要的操作。
我们来对一个str进行遍历:
s = "python" for i,v in enumerate(s): print(i, v)
0 p 1 y 2 t 3 h 4 o 5 n
可以看出str是一个可迭代对象,我们使用enumerate配合for循环可以取到每个元素的索引和值。
在python中这种索引都是以0开始的,然后逐个递增。
我们来看几个切片的例子:
s = "python"
print(s[:3]) #起始为0,截取到3的位置,但不包含3
print(s[:-1]) #负数索引,-1表示最后一个,-2则是倒数第二个,以此类推
print(s[:]) #从头取到尾,在后面学到字典时,这种方式可以用于作为字典的复制。
print(s[::2]) #步长为2,逢2取1
print(s[::-1]) #步长为-1,可以理解为字符串的反转
print(s[-1:-3:-1]) #从右往左取
pyt
pytho
python
pto
nohtyp
no
我们可以看出字符串切片可以提供3个参数:
str[start:end:stemp]
start: 起始位置,不指定的话默认为0
end:结束位置,不指定默认到字符串结尾,但是指定了end的数值,切片获得的字符串是不包含end索引位置的字符的。
stemp:步长,可以理解为跳着取值,当步长为2时,则是逢2取一;当步长为正数时,或者不指定步长时,字符串从左往右进行切片,起始位置需要在结束位置的左边;如果步长为负数时,起始位置需要在结束位置的右边,而且返回的新字符串相当于做个反转。
Note:可以这么理解,当我们步长为-1时,s[1:3:-1] 起始索引1 + 步长-1 =0,这时索引时0,是往左移了,然而设置的结束位置是在右边,这样索引是到不了结束位置的,所以这样切片是返回不了值的;我们看一下s[3:1:-1],这样情况下起始索引 3+ 步长-1= 2,新的索引是往结束位置靠近的,这样就可以界定整个切片的范围了,所以说,当索引为负数时,切片时从右往左进行的。
字符串方法:
1.capitalize() 把首字母变成大写
In [1]: s = "python" In [2]: s.capitalize() Out[2]: 'Python'
2.lower() 把所有字母变成小写
In [4]: s = "PyThoN" In [5]: s.lower() Out[5]: 'python' In [6]:
3.upper() 把所有字母变成大写
In [4]: s = "PyThoN" In [5]: s.upper() Out[5]: 'PYTHON' In [6]:
4.swapcase() 大小写互换
In [4]: s = "PyThoN" In [5]: s.lower() Out[5]: 'python' In [6]:
5.title() 将字符串变成标题的格式(单词首字母大写,其他字母小写)
In [10]: s = "i love python" In [11]: s.title() Out[11]: 'I Love Python'
6.center(10,*) 把字符串居中,用指定字符填充两边
In [12]: s = "python" In [13]: s.center(20,"*") Out[13]: '*******python*******'
7.strip() 不指定参数,默认去除字符串左右两边的空白(\n,\t),指定参数则去除字串两边的指定字符
In [14]: s = """ python \n ...: """ In [15]: s.strip() Out[15]: 'python'
In [16]: s = "***python****" In [17]: s.strip("*") Out[17]: 'python'
8.rstrip() 用法参考strip,区别是,rstrip只操作字串的右边
In [18]: s = "***python****" In [19]: s.rstrip("*") Out[19]: '***python'
9.lstrip() 用法参考strip,区别是,lstrip只操作字串的左边
In [22]: s = "***python****" In [23]: s.lstrip("*") Out[23]: 'python****'
10.replace(old,new,count=None) 替换字串中的指定字符串为新值,count为替换几次,默认全部替换
s.replace(" ","") 去除字符串中所有的空格
In [24]: s = "i love python,i love everything!" In [25]: s.replace("love","like") Out[25]: 'i like python,i like everything!'
In [26]: s = "i love python,i love everything!" In [27]: s.replace("love","like",1) Out[27]: 'i like python,i love everything!'
11.split(sep=None,maxsplit(-1)) 切割字符串,默认使用空白进行切割,指定seq的话,则用seq进行切割,maxsplit默认切割所有,设置值的话,设置为几就切割几次
In [28]: s = "i love python,i love everything!" In [29]: s.split() Out[29]: ['i', 'love', 'python,i', 'love', 'everything!']
In [30]: s = "i love python,i love everything!" In [31]: s.split("love") Out[31]: ['i ', ' python,i ', ' everything!']
In [32]: s = "i love python,i love everything!" In [33]: s.split("love",1) Out[33]: ['i ', ' python,i love everything!']
12.format() 字符串格式化。
In [35]: "i love {one},i love {two}!".format(one="python",two="everything") Out[35]: 'i love python,i love everything!'
13.startswith() 是否以指定字符串开头
In [37]: s.startswith("py") Out[37]: True In [38]: s.startswith("th") Out[38]: False
14.endswith() 是否以指定字符串结尾
In [39]: s = "python" In [40]: s.endswith("on") Out[40]: True In [41]: s.endswith("ho") Out[41]: False
15.count() 计算指定字符在字符串中出现的次数
In [44]: s = "i love python,i love everything!" In [45]: s.count("e") Out[45]: 4 In [46]: s.count("e",0,10) Out[46]: 1
16.find() 查找指定字符出现在字符串中第一次出现的位置,找不到返回-1
In [47]: s = "i love python,i love everything!" In [48]: s.find("love") Out[48]: 2 In [49]: s.find("like") Out[49]: -1
17.index() 查找指定字符出现在字符串中第一次出现的位置,找不到会出现ValueError
In [50]: s = "i love python,i love everything!" In [51]: s.index("love") Out[51]: 2 In [52]: s.index("like") --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-52-5c52c8570433> in <module>() ----> 1 s.index("like") ValueError: substring not found
18.isdigit() 判断是否是数字
In [53]: n = "123" In [54]: n.isdigit() Out[54]: True
19.isalpha() 判断是否是字母
In [57]: s = "abc" In [58]: s.isalpha() Out[58]: True
20.isalnum() 判断是否是数字和字母组成
In [59]: s = "abc123" In [60]: s.isalnum() Out[60]: True
21.len() 计算字符串的长度
In [61]: s = "python" In [62]: len(s) Out[62]: 6
至此我们列举了很多字符串方法了,还有很多,如有右需要可自行查阅,https://docs.python.org/3/library/stdtypes.html?highlight=str#str