python学习笔记之字符串
python学习笔记之字符串
一、字符串
字符串是python的六大数据类型之一。创建字符串可以使用单引号、双引号或者三引号(如'''或"""),字符串的内容可以是各种符号、中英文字符等。一些特殊的符号需要使用反斜杠 \ 进行转义。
#四种引号定义字符串 str_one = 'hello world' str_two = "hello world" str_three = '''hello world''' str_four = """hello world"""
二、字符串的取值
字符串是可迭代的类型,可以通过for循环将其中的所有字符都取出来。也可以通过索引取值的方法,取出字符串内索引对应的字符。通过切片的方法,一次取出多个字符,方法和列表的切片方法一样,可以将字符串当作列表来操作
string = 'hello' #可迭代的对象 for s in string: print(s) #输出的结果: h e l l o string[0] #输出的结果:'h' string[0:3] #输出的结果:'hel' string.split('e') #以'e'为分割符,切成两部分,返回列表['h', 'llo'] list(string) #转化成列表,['h', 'e', 'l', 'l', 'o']
三、字符串的拼接及格式化输出
字符串与字符串之间的拼接有两种方法:
1.'+'加号拼接
str_one = 'hello' str_two = 'world' string = str_one + str_two
这种方法使用起来简单直接,但是效率相比下面的方法有些低,尤其在拼接多个字符串时,不建议使用,因为这个方法除了生成新的字符串时会开辟一个新的内存,在生成前的加号也要开辟一个新的内存。
2.join方法拼接
string = ''.join([str_one, str_two]) #join的参数必须是可迭代的对象 print(string) #输出'helloworld' string = ' '.join([str_one, str_two]) #引号间增加一个空格,字符串之间拼接会增加一个空格,引号间可以是任意字符,拼接后的字符串之间都会以引号间的字符隔开 print(string) #输出'hello world'
字符串方法join可用于拼接列表、元组等可迭代的对象,但注意如果传入的字典,最后得到的是字典key拼接后的结果。可以将传入列表或元组中的元素连接起来,返回一个连接后的字符串,一个列表或元组中的元素进行拼接,这个方法首选,只是这个方法使用起来略微复杂。
3.'%'符号拼接
string = '%s%s' %(str_one, str_two) #元组中变量顺序要对应%s的顺序 print(string) print('姓名:%s, 问题:%s' %(str_one, str_two)) #用于这种情况较多
这个方法通常用于进行格式化输出,输出一定格式的字符串,将'%'符号后的特殊符号(又称为占位符)替换成引号右边'%'符号的变量值,除了字符串也可以用于替换数字类型。
4.format()方法拼接
string = '{}{}' print(string.format(str_one, str_two)) #输出helloworld #也可以用于格式化输出 print('你好:{one}, 世界:{two}'.format(one=str_one, two=str_two))
format和join一样都是字符串方法,和'%'符号类似,可以将字符串内特殊符号位置替换成format()方法中传入的参数
5.string模块中Template类拼接
这种方法不是很常见,使用这个方法时需要先实例化一个Template对象,并传入一个特殊字符和key(如${key}),再用对象调用substitute或safe_substitute方法传入关键参数,这两个方法的区别是当有个key没传值的话,safe_substitute会将特殊字符和key名直接拼接到字符串,substitute则直接抛出异常
from string import Template st = Template('${one} ${two}') print(st.substitute(one=str_one, two=str_two)) #输出hello world
6.f-string拼接
python3.6版本引入了的一种新的格式化字符串方法-string,叫做格式化字符串常量(formatted string literals),定义字符串引号前使用修饰符'f'或'F',字符串内使用大括号{}里放入变量名或表达式等,这个方法还有许多用法,以后有空对这个方法单写一篇。如果你用的python版本是3.6及以上的,建议用这个方法,使用起来非常简洁而且性能优,运行速度高于上面的这几种方法。
string = f'{str_one}{str_two}' #两个字符串拼接 num_one = 1 num_two = 2 print(f'一加二等于{num_one + num_two}') #运算大括号里的表达式,输出结果:一加二等于3 print(f'一加二等于{{num_one + num_two}}') #输出结果:一加二等于{num_one + num_two} print(f'一加二\'等于\'{num_one + num_two}') #输出结果:一加二'等于'3
7.其他的拼接
print(str_one, str_two) #这样输出时,两个字符串会拼接,但是中间会多出一个空格,输出hello world str_five = ('hello' 'world') print(str_five) #两个字符串拼接,输出helloworld
上面这两种拼接方法,通常不会去用,但是遇见这样的代码,我需要知道这里会做字符串的拼接
四、字符串内置方法
一些常用的字符串内置方法:
string.count('') #字符串中某个元素的次数 string.capitalize() #字符串首字符大写 string.center(50,'-) #字符串一共50个字节,除string外,其他用’-’替代,且string矩阵 string.endswith('') #判断字符串以哪个字符串结尾,返回bool型 string.startswith('') #判断字符串以哪个字符串开头,返回bool型 string.expandtabs(tabsize=20) #替换字符串的\t,换成20个空格 string.find('') #查找字符串中的某个元素,并返回它的索引值 string.format() #相当于格式化输出的用法 string.format_map() #和format方法的区别在于,这个方法参数是字典 string.index() #方法和find用法一样,不同的是find不会报错会返回-1,index会报异常 string.isalnum() #字符串中包含数字和字母就会返回true,否则就是false string.isdecimal() #判断字符串是不是十进制 string.isdigit() #判断字符串内是不是个整型数,返回bool型 string.isnumeric() #和上面方法一样 string.isidentifier() #判断字符串是不是非法变量 string.islower() #判断字符串内是不是都是小写的 string.isupper() #判断字符串内是不是都是大写的 string.isspace() #判断字符串是不是都是个空格 string.istitle() #判断字符串是不是个标题(首字母大写) string.lower() #将字符串中所有大写变成小写 string.upper() #将字符串中所有小写变成大写 string.swapcase() #将字符串中所有小写变成大写, 将字符串中所有大写变成小写 string.ljust(50,’-') #string靠左,剩余的用’-’填充 string.rjust(50,’-') #string靠右,剩余的用’-’填充 string.strip() #去掉字符串左右的空格和换行符 string.replace() #替换字符串的元素成另一个元素,可以传入三个参数,第一个是原元素,第二个是替换成的元素,第三个是替换几次 string.rfind() #从右开始往左找,返回第一个匹配到的索引值 string.split() #分割字符串,返回列表,第二参数表示最多分割几次 string.title() #字符串变成title形式,首字母大写
ps:
通过str类,可以直接将一些数据类型转化成字符串类型
str_list = [1, 2, 3] print(str(str_list)) #这样转化出来的值是'[1, 2, 3]', 和字符串拼接不一样 one = 1 print(str(one)) #这样是把整型转化成字符串类型 byte = b"hello" print(str(byte, encoding='utf-8')) #将bytes类型转化成字符串类型