python字符串

148 阅读5分钟

python字符串

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

字符串

字符串

  • 字符串常量池

avatar

a = 'hello'
b = a
c = 'hello1'
print(id(a))
print(id(b))
print(id(c))

以上中a与b的地址相同,c不同

意义:字符串常量池可以将新出现的字符串存储下来,并且往后的赋值都能拿字符串的存储地址来进行反复赋值

  • 字符串索引机制
  1. 0 ~ len(a)-1
  2. -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)