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

把可迭代对象中的每一个元素,分别赋值给前面的变量,可以方便可迭代对象的遍历。