python字符串
一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天
字符串
字符串
- 字符串常量池

a = 'hello'
b = a
c = 'hello1'
print(id(a))
print(id(b))
print(id(c))
以上中a与b的地址相同,c不同
意义:字符串常量池可以将新出现的字符串存储下来,并且往后的赋值都能拿字符串的存储地址来进行反复赋值
- 字符串索引机制
- 0 ~ len(a)-1
- -len(a) ~ -1
切片
主要用于列表切片
- 格式
字符串变量[start : end](注意:这里是左闭右开)
s = 'ABCDEFG'
print(s[1:4])
>>> BCD
print(s[0:5])
>>> ABCDE
print(s[:5])
>>> ABCDE
print(s[-3:7])
>>> EFG
print(s[-3:])
>>> EFG
print(s[:])
>>> ABCDEFG
id(s[:]) == id(s)
>>> Ture
注意
- 在切片时会有一个方向,一般是从左往右的一步一步取
- 两种索引方法可以混合使用
- [:5]和[1:]分别是从头取和取到尾
- s[:]与s的地址是一致的(可见上述的字符串常量池)
- s[start :end : step] step可以改变取值的递增变化并且正负可以表示取值的方向
字符串常用操作
| 操作 | 结果 |
|---|---|
| len | 取字符串长度 |
| find,index,rfind,rindex | 查找内容 |
| startswith,endswith,isalpha,isdigit,isalnum,isspace | 判断 |
| count | 计算出现次数 |
| replace | 替换内容 |
| split,rsplit,splitlines,partition,rpartition | 切割字符串 |
| capitalize,title,upper,lower | 修改大小写 |
| ljust,rjust,center,lstrip,strip | 空格处理 |
| join | 字符串拼接 |
注意:在pytho中,字符串是不可变的,上述操作的结果不会替代原来的结果,而是出一个新的结果
len(取字符串长度)
len函数可以获取字符串的长度
a = 'lichuang'
print(len(a))
>>> 8
查找内容
find:从左到右查找到所需的第一个元素停止查找并返回索引值,若没找到则返回-1
url = 'http://www.mzmm403.top/baidu/#/'
i = url.find('p')
print(i)
>>> 3
rfind:从右往做找(rigth find),其余与上述find没有区别
url = 'http://www.mzmm403.top/baidu/#/'
i = url.rfind('p')
print(i)
>>> 21
index:从左到右查找到所需要的第一个元素停止查找,若没找到则会报错
rindex:从右到左查找第一个元素停止查找,若没找到则会报错
查找内容也可以是多个字母,输出的结果是输出首字母的索引值
计算出现的次数(count)
url = 'http://www.mzmm403.top/baidu/#/'
i = url.count('p')
print(i)
>>> 2
判断
endswith:判断以xxx结尾
startswith:判断以xxx开头
s = 'cv13043466.jpg'
i = s.startswith("cv")
print (i)
这里我们来浅试一下
# 构架验证码
filename = ""
import random
s = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890'
for i in range(6) :
index = random.randint(0,len(s)-1)
filename += s[index]
print(filename)
isalpha:是否是字母
isdigit:是否是数字
isalnum:是否是数字和字母
isspace:是否是空格 ,这里只能判断纯空格,若内部有空格和其他的字符都是false
isupper:判断是否全部是大写字母
s = 'asadssadfas'
result = s.isalpha()
print(result)
s = '1321'
result = s.isdigit()
print(result)
s = 'asda12ew1'
result = s.isalnum()
print(result)
s = ' '
result = s.isspace()
print(result)
s = 'HELLO'
result = s.isupper()
print(result)
下面我们用现在学到的知识做一个简单的登录判断
# login
i = 0
while i == 0:
numbername = input('请输入用户名/手机号:')
end = numbername[:1]
if (numbername.isdigit() and len(numbername) == 11) or (numbername.islower() and len(numbername) > 6 and not(end.isdigit())) :
while True :
mima = input('请输入密码:')
if mima.isdigit() and len(mima) == 6:
print('恭喜您登录成功!')
i = 1
break
else :
print('密码错误!')
else :
print('用户名错误!')
i = 0
continue
# 这里我没做循环 懒得做了
替换 分隔 字母转换
- replace:替换字符
replace(old,new,count),默认全部替换,也可以通过count指定次数
s = '王江浩是帅哥!王江浩不如我帅!'
result = s.replace('王江浩','**')
print(result)
>>> ***是帅哥!***不如我帅!
s = '王江浩是帅哥!王江浩不如我帅!'
result = s.replace('王江浩','**','1')
print(result)
>>> ***是帅哥!王江浩不如我帅!
- 分割:split,rsplit,splitlines,partition,rpartition
# split('分隔检索的标准',maxsplit) ,这里返回的是一个列表,maxsplit是最多切的刀数
# rsplit与上面的查找相似,从右往左切,但这里要注意的是最后输出结果是从左往右
s = '今天 天气 真 好'
result = s.split(' ') #这里分隔检索的标准是空格
print(result)
>>> ['今天','天气','真','好']
s = '今天 天气 真 好'
result = s.split(' ',1)
print(result)
>>> ['今天','天气 真 好']
s = '今天 天气 真 好'
result = s.rsplit(' ',1)
print(result)
>>> ['今天 天气 真 ','好']
# splitlines() 这里是按行切割,其他与上述的切割是一样的
s = '''王江浩
今天天气真好
快点出来玩
'''
result = s.splitlines()
print(result)
>>> ['王江浩', '今天天气真好', '快点出来玩']
# partition,rpartition :输出结果为元组,只切一刀,且会把分隔检索便准也会放进结果,后者只是换了方向分隔
s = '今天 天气 真 好'
result = s.partition(' ')
print(result)
>>> ('今天', ' ', '天气 真 好')
- 字母转换(修改大小写)
capitalize,title,upper,lower:字母大小写转换
s = 'hello world'
result = s.title()
print(result)
>>> Hello World
s = 'hello'
result = s.upper()
print(result)
>>> HELLO
s = 'HELLO'
result = s.lower()
print(result)
>>> hello
s = 'hello world'
result = s.capitalize()
print(result)
>>> Hello world
空格处理
- 空格处理
lstrip,strip:去除空格
s = ' mzmm403 '
result = len(s)
print(result)
result = len(s.strip()) #去除头和尾的空格
print(result)
result = len(s.lstrip()) #去掉左边的空格
print(result)
result = len(s.rstrip()) #去掉右边的空格
print(result)
ljust,rjust,center:利用空格来实现对齐
s = 'hello world'
result = s.center(30) #表示在30个字符的中间位置(居中对齐)
print(result)
result = s.ljust(30) #表示在30个字符的最左边位置(居左对齐)
print(result)
result = s.rjust(30) #表示在30个字符的最左边位置(居左对齐)
print(result)