python 之玩转字符串
什么是字符串
字符串是一串有序的字符序列。
字符串是由 ' " ''' 括起来的内容。
示例:
'hello world'
"我的中国心"
'''
周星驰
周杰伦
周润发
'''
怎么访问字符串(即字符串的索引和切片)
1. 索引:
索引就是一排数字,反应第某个位置的字符,索引的下标从0开始。使用[] 获取数据。
示例:
>>> s = "刘德华很帅?不是吗"
>>> s[2]
'华'
>>> s[4]
'帅'
取最后一个字符
>>> s[8]
'吗'
>>> s[-1]. #倒数第一
'吗'
2. 切片 s[start:end:step]:
顾头不顾尾,也就是说end这个字符取不到。
切片的默认的方向是从左往右。
[1:] 表示从1切到结尾
[:3] 表示开头切到第3个字符
[:] 表示从头切到尾
>>> s
'刘德华很帅?不是吗'
>>> s[:-1]
'刘德华很帅?不是'
>>> s[-3:]
'不是吗'
>>> s[:]
'刘德华很帅?不是吗'
step 步长
[start:end:step]中第三个参数是步长
step 默认是1,从左往右取, -1表示从右往左取。
>>> s[5:1:-2]
'?很'
>>> s[:]
'刘德华很帅?不是吗'
>>> s[::-1]
'吗是不?帅很华德刘'
>>>
判断回文
>>> s1="上海自来水来自海上"
>>> if s1 == s1[::-1]:
... print("是回文")
... else:
... print("不是回文")
...
字符串常见操作(字符串的自带方法)
s.capitalize() 首字符大写
s.lower() 转换成小写字母
s.upper() 转换成大写字母
s.swapcase() 大小写互换
s.title()单词的首字母大写
s.strip() 去掉左右两端的空白, 使用场景用户输入的内容都要去空白。
s.replace("taibai","taihei") #把taibai替换成taihei,全部替换
s.split('_') #切割,结果是list
s.find('a' ) #查找
s.isdigit() #是否由数字组成
>>> s= "alex is not a good man"
>>> s.capitalize() 首字符大写
'Alex is not a good man'
>>> s.upper() 转换成大写字母
'ALEX IS NOT A GOOD MAN'
>>>
>>> s1
'ALEX IS NOT A GOOD MAN'
>>> s1.lower() 转换成小写字母
'alex is not a good man'
upper使用场景,判断输入字母大小写时
>>> while True:
... content = input('请输入你要写的内容(输入q退出):')
... if content.upper() == 'Q': #另一种不推荐的写法 if content == "q" or content == "Q":
... break
... print(content)
>>> s1
'ALEX IS NOT A GOOD MAN'
>>> s1.swapcase() 大小写互换
'alex is not a good man'
>>> s = 'calss app banab'
>>> s.title() 标题大写,把单词的首字母大写,根据非字符串来区分单词,比如空格,整型等
'Calss App Banab'
>>> s = 'calss app ban2ab'
>>> s.title()
'Calss App Ban2Ab'
>>> s.center(20,'*') #居中,将字符串拉长为长度20,并以*填充。
'*********刘伟*********'
>>> s = " 你好啊,我叫刘德华。 "
>>> s
' 你好啊,我叫刘德华。 '
>>> s.strip() #去掉空白, 空白包含空格,和/t
'你好啊,我叫刘德华。'
>>> s1
'\t 你好啊,我叫刘德华。 '
>>> s.strip()
'你好啊,我叫刘德华。'
yx-2:py yx$ cat test7.py
username = input("请输入用户名:").strip() #必须做去空白处理
password = input("请输入密码:").strip() #必须做去空白处理
if username == 'alex' and password == '123':
print('sucessful!')
else:
print('failed!')
strip('abc'). #去掉指定的元素
>>> s = '刘伟很帅刘伟'
>>> s.strip('刘伟')
'很帅'
字符串替换 replace()方法
>>> s = 'alex_wusir_ritian_taibai_evaj_eggon'
>>> s1 = s.replace("taibai","taihei") #把taibai替换成taihei,全部替换
>>> s1
'alex_wusir_ritian_taihei_evaj_eggon'
>>> s2 = s.replace("i","SB",2)
>>> s2
'alex_wusSBr_rSBtian_taibai_evaj_eggon' #把i换成SB,换2次
>>>
字符串切割
>>> s
'alex_wusir_ritian_taibai_evaj_eggon'
>>>
>>> s.split('ritian') #切割,刀有多宽,就要损失掉多少
['alex_wusir_', '_taibai_evaj_eggon']
>>> s.split('_')
['alex', 'wusir', 'ritian', 'taibai', 'evaj', 'eggon']
s.split('\n') #用\n切割,换行符切割,一般用来切割日志
>>> a.split('5') #注意坑,如果切割在左右两端,那么一定会出现空字符串
['1234', '']
格式化输出
%s 字符串
%d 数字
>>> print('我叫%s,我今年%d岁,我喜欢干%s'%('alex',3,'python'))
我叫alex,我今年3岁,我喜欢干python
>>> print( "我叫{},我今年{}岁,我喜欢干{}".format('alex',18,'python'))
我叫alex,我今年18岁,我喜欢干python
>>> print("我叫{1},我今年{0}岁,我喜欢干{2}".format('alex',18,'python'))
我叫18,我今年alex岁,我喜欢干python
>>> print("我叫{name},我今年{age}岁,我喜欢干{hobby}".format(name='alex',age=18,hobby='python'))
我叫alex,我今年18岁,我喜欢干python
查找方法
判断字符串是以什么开头或者结尾
s.startswith('a')
s.endswith('z')
s.count('炸鸡')
>>> s = '胡辣汤 炸鸡 啤酒 烤鸭 锅包肉 炸鸡炸鸡 炸鸡'
>>> s.count('炸鸡')
4
>>> s.find("胡辣汤") #找到字符串的位置,如果找不到返回-1
0
>>> s.index("疙瘩汤") #和find类似,但是如果找不到报错。
条件判断
isalnum() 是否由字母和数字组成
isalpha() 是否由字符串组成
>>> s='123'
>>> s.isdigit() #是否由数字组成
True
>>> s='一二三'
>>> s.isnumeric() #是否由数字组成,比较牛逼,识别多种语言,“两”字不是数字
True
计算字符串长度
len(s) #内置函数len(字符串),返回字符串长度
迭代
遍历字符串的第一种方法:
s = '2134141'
count = 0
>>> while count < len(s):
... print(s[count])
... count = count + 1
第二种方法:
可迭代对象
for 变量 in 可迭代对象:
pass
把可迭代对象中的每一个元素,分别赋值给前面的变量,可以方便可迭代对象的遍历。