1.用途:记录描述性质的状态,例如名字,性别,国籍等
2. 定义方式:在引号('',"",''' ''',""" """)内包含一串字符串
s='hello' #s=str('hello')
str功能可以把任意类型转换成str类型
res=str([1,2,3]) #"[1,2,3]"
print(type(res))
3.常用操作加内置方法
===========================》优先掌握
1.按索引取值(正向取,反向取):只能取 不能改
s='hello word'
print(s[0],type(s[0])) #'h'
print(s[-1])
非法操作
s[1]='E' #不能修改 会报错
s[222]
s[11]='A'
2.切片 (顾头不顾尾,步长)===》属于拷贝操作
s='hello word'
new_s=s[1:7]
print(new_s)
print(s)
new_s=s[1:7:2] #1 3 5
print(new_s)
print(s)
new_s=s[:7:2]
new_s=[::2] #0 2 4 6 8 10
print(new_s) #h l o w r d
print(s)
new_s=s[::] #完整拷贝,只留一个冒号就可以
print(new_s)
print(s)
s='hello word'
s1=s[1::-1] # 不显示取值 会将所有的值都取完
print(s1) # eh
print(len(s))
s2=s[9:7:-1] #字符串长度为10 最后一个字符的索引为9
print(s2) #d r
统计字符串的长度len
s='hello word'
print(len(s))
res=print('sfd')
print(res)#None
4.成员运算 in 和not in
s='hello word'
print('hel' in s )
print('egon' not in s )#语义明确,推荐使用
print(not 'egon' in s )
5.移除空白strip() 碰到不属于strip()里面的字符停下来,默认()内是空格,再从右边开始
s='\n hello \t '
print(id(s)) #2171590232784
new_s=s.strip()
print(new_s)
print(id(s)) #2171590232784 没有改变原字符串
去除左右两边非空白字符
s='hh#$%^&*hello word^&'.strip('h#o$%worfde^&ll*')
print(s) 打印出来是空格
6.切分split:把字符串按照某个分隔符切成一个列表
userinfo='egonn123n18n3n1:'
res=userinfo.split('n')
print(res)
res='a'
res=res.split('a')
print(res)
纯字符串组成的列表 (把列表按照某个格式切分成一个字符串)
p=['11','22','33','44','55']
res=':'.join(p)
print(res)
print('a a a a a'.split('a'))
res='my name is {x}{x}{y} my age is {y}{y}'.format(x=name,y=age)
print(res)
======================>需要掌握的操作
1.strip,lstrip,rstrip
print('*****hello****'.strip("*"))
print('*****hello****'.rstrip("*")) #去除右边的字符
print('*****hello****'.lstrip("*")) #去除左边的字符
2.lower,upper
msg='FGfFgjhjhFGfG'
res=msg.lower() #全部变小写
res1=msg.upper() #全部变大写
print(res,res1)
res=msg.swapcase() #大小写互相转换
print(res)
3.startswith,endswith 判断一个字符是否为另一个字符串的首位或者末尾
msg='zhikun is Dsb'
print(msg.startswith('sb'))
print(msg.startswith('zhi'))
print(msg.endswith('sb'))
4.format的三种玩法
4.1 %s的方式
name='egon'
age=18
res1='my name is %s my age is %s'%(name,age)
print(res1)
4.2 formate的方式
name='egon'
age=18
res1='my name is {} my age is {}'.format(name,age) 根据位置一一对应
res2='my name is {0}{0}{0} my age is {0}{0}{0}{0}{0}{1}'.format(name,age) 根据索引对应
res3='my name is {x} my age is {y}'.format(x=name,y=age) 根据变量名一一对应
print(res1,res2,res3)
4.3 f''
name='egon'
age=18
res1=f'my name is {name} my age is {age}' 在引号内的花括号可以直接引用变量名来实现格式化输出
print(res1)
了解:f搭配{}可以执行字符串中的代码
res=f'{len("hello")}'
print(res)
f'{len("hello")}' 相当于eval 都可以去运行字符串中的代码
res1=eval('len("hello")')
print(res1)
f包含的字符串可以放到多行
name='egon'
age=18
res1=f'my name is {name}' \
f' my age is {age}'
print(res1)
在{}内不能有\以及#
print(f'my name is {{egon}}') #想要打印后加上{} 可以再外面再套一个花括号,不能用转译符和#
print('胜率是%s%%' %70) #想要打印百分比符号 需要在%后再加一个%取消前一个%的功能
5.split,rsplit
zhikun_dsb='zhikun:123:18'
print(zhikun_dsb.split(":")) #以:为切割符 将字符串切割为字典 不指定切割次数 默认从左到右全部切割
print(zhikun_dsb.split(":",1)) #以:为切割符,指定从左到右切割一次
print(zhikun_dsb.rsplit(":",1)) #以:为切割符,指定从右到左切割一次
6.join 将纯字符串的列表按照某种格式拼接为一个大字符串,
如果join内为字符串,则会在字符串的每个子字符串后加入拼接的字符。
l=['zhukun_dsb','baobao_dsb','qiqi_dsb']
yangyang='='.join(l)
yangyang1='='.join('sdaweqr')
print(yangyang)
print(yangyang1)
o=l[1]
y=l[2]
y=list(y)
print(y)
yangyang='>'.join('qiqi_dsb')#q>i>q>i>_>d>s>b
print(yangyang)
l=['zhukun_dsb']
res='>'.join(l)
print(res)
name='egon'
age='18'
7.replace 指定将字符串中的子字符替换成新的子字符,产生了一个新的字符串。
msg = "***egon hello***"
res=msg.replace('*','').replace(' ','')
res=msg.strip('*').replace(' ','')
print(res)
s="lxx hahah wocale lxx sb 666"
res=s.replace('lxx','sb')
res=s.replace('lxx','sb',1)
print(res)
print(s)
8.isdigit:判断字符串是否由纯数字组成
print("asdasdjsdkf54654".isdigit()) False
print('5454564546'.isdigit()) True
了解
1.find rfind index rindex count
1.1 find :从指定范围内查找子字符串的其实索引值,找到返回该数字的索引值,找不到返回数字-1
msg='tony say hello'
print(msg.find('m'))
print(msg.find('s'))
find还可以指定查找索引的范围
print(msg.find('s',0,5)) #找不到返回数字-1
print(msg.find('s',0,6)) #找不到返回数字5
1.2 index : 与find一样 功能都是查找子字符串在字符串中的索引值,但是找不到会报错,所以一般推荐用find
print(msg.index('s'))
print(msg.index('m'))
也可以指定查找范围
print(msg.index('s',0,6))
print(msg.index('s',0,5))
1.3 rfind rindex 作用是从右到左查找子字符串在字符串中的位置,输出结果与find index 结果相同
print(msg.rfind('s')) # 5
print(msg.rindex('s')) #5
1.4 count 作用是统计子字符串在字符串中出现的次数
msg='tony say hello'
print(msg.count('x')) #0
print(msg.count('l')) #2
print(msg.count('l',0,-1)) #也可以指定查找范围
2.center ljust rjust zfill
2.1 center 作用是指定字符串的打印长度,并且字符串居中显示,不够的可以用指定的字符填充
name='tony'
print(name.center(30,'*')) #*************tony************* 总长度为30个字符
2.2 ljust 作用是指定字符串的打印长度,并且字符串左对齐,不够的用指定字符填充
print(name.ljust(20,'=')) #tony================ 总长度为20个字符
2.3 rjust 作用是指定字符串的打印长度,并且字符串右对齐,不够的用指定字符填充
print(name.rjust(10,'&')) #&&&&&&tony 总长度为10字符
2.4 zfill 作用是指定字符串的打印长度,并且字符串右对齐,不够的用0填充
print(name.zfill(20)) # 0000000000000000tony 总长度为20
3.expandtabs 作用是修改制表符代表空格数 疑问:制表符代表多少空格
name1='hello\tword'
print(name1) #'hello word'
print(name1.expandtabs(1)) #hello word
4.capatalize swapcase title
4.1 captalize 首字母大写
name='egoN read'
print(name.capitalize()) #Egon read
4.2 swapcase 作用是将字符串的大小写转换过来
print(name.swapcase()) #EGOn READ
4.3 title 每个单词的首字母大写
print(name.title()) #Egon Read
5.is 数字系列
在python3中
num1=b'4'
print(num1) #bytes
num2=u'4'
print(num2) #unicode,在python3中无需加u就是Unicode
num3='四' #中文数字
print(num3)
num4='Ⅷ' #罗马数字
print(num4)
num9='III'
print(num4==num9) False
5.1 isdigit 判断字符串是否由纯数字组成
print(num1.isdigit())
print(num2.isdigit())
print(num3.isdigit()) #False
print(num4.isdigit()) #False
5.2 isdecimal判断字符串是否为Unicode类型bytes类型无isdecimal方法
print(num2.isdecimal()) #True
print(num3.isdecimal()) #False
print(num4.isdecimal()) #False
5.3 isnumberic 判断字符串是否为unicode 中文数字 罗马数字(百度教你打的罗马字符是错误的) (bytes类型无isnumberic方法)
print(num2.isnumeric()) #True
print(num3.isnumeric()) #True
print(num4.isnumeric()) #False
三者都无法判断浮点型
num5='4.3'
print(num5.isdigit())
print(num5.isdecimal())
print(num5.isnumeric())
全部为False
总结:最常用的是isdigit,可以判断bytes和Unicode类型,这也是最常见的数字应用场景
如果要判断中文数字或罗马数字,则需要用到isnumeric。
6 is其他
name='tony123'
print(name.isalnum()) #字符串中既可以包含数字也可以包含字母
# True
print(name.isalpha()) #字符串是否只包含字母
# False
print(name.isidentifier()) # ???
# True
print(name.islower()) #字符串是否为纯小写
print(name.isupper()) #字符串是否为纯大写
print(name.isspace()) #字符串是否全为空格
print(name.istitle()) #字符串中的单词首字母是否全为大写