Python3.7之字符串
一、基础知识
在python中,加了引号的字符均被认为是字符串。单双引号没有任何区别,但要考虑字符串内含有引号的配合情况,多行字符串必须用多引号。
二、字符串常用函数
1.合并字符串之join()与format()
join():用于将序列中的元素以指定的字符连接生成一个新的字符串。
l = ['a','a','a','a']
L1 = ''.join(l) # output is 'aaaa'
L2 = 'b'.join(l) # output is 'abababa'
L3 = '5'.join(l) # output is 'a5a5a5a'
format():Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。
基本语法是通过 {} 和 : 来代替以前的 % 。format 函数可以接受不限个参数,位置可以不按顺序。
# 形式一
print('{0}{1}{0}'.format('a', 'b'))
# 形式二,必须一一对应
print('{}{}'.format('a', 'b'))
# 形式三
print('{name}的年龄是{age}'.format(age=12, name='彩虹然'))
'''
aba
ab
彩虹然的年龄是12
'''
2. strip()与split()辨析
strip是删除的意思,而split则是分割的意思,两者功能不同。
strip():取掉字符两端字符(默认是空格,当然也可以以自定义字符放到括弧里),所以就有rstrip(),lstrip(),意思是去掉右边、去掉左边。
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
l = '222hello22222222'
l.strip('2') # output is 'hello'
l.rstrip('2') # output is 222hello
l.lstrip('2') # output is hello2222222
只要头尾包含有指定字符序列中的字符就删除
str = "123abcrunoob321"
print (str.strip( '12' )) # 字符序列为 12
'''
3abcrunoob3
'''
split():通过指定分隔符对字符串进行切片,分割成列表,如果参数 num 有指定值,则分隔 num+1 个子字符串。分隔符默认为空字符,包括空格,换行符,制表符,num默认为-1。
str = "Line1-abcdef \nLine2-abc \nLine4-abcd"
print(str.split()) # 以空格为分隔符,包含 \n
print(str.split(' ', 1)) # 以空格为分隔符,分隔成两个
'''
['Line1-abcdef', 'Line2-abc', 'Line4-abcd']
['Line1-abcdef', '\nLine2-abc \nLine4-abcd']
'''
3. find()与index()辨析
s.index(x):返回字符串s中出现x的最左端字符的索引值,如果不在则抛出ValueError异常(报错)
s.find(x) :返回字符串s中出现x的最左端字符的索引值,如果不在则返回-1
均为找到x即返回,不进行后面的二次判断。
s = 'Hello, how are you?'
print(s.find('o'))
print(s.index('o'))
print(s.find('i'))
'''
4
4
-1
'''
print(s.index('i'))
'''
ValueError: substring not found
'''
4.切片
格式: [starts: end: step]
• [:] 提取从开头(默认位置0)到结尾(默认位置-1)的整个字符串
• [start:] 从start 提取到结尾
• [:end] 从开头提取到end - 1
• [start: end] 从start 提取到end - 1
• [start: end: step] 从start 提取到end - 1,每step 个字符提取一个
• 左侧第一个字符的位置/偏移量为0,右侧最后一个字符的位置/偏移量为-1
注意:字符串倒转
s = 'Hello, how are you?'
print(s[::-1])
'''
?uoy era woh ,olleH
'''
5.其他函数
capitalize(): 首字母变大写
center(width[, fillchar]): 原来字符居中,不够用字符串补全(默认字符)
count(sub[, start[, end]]): 从一个范围内统计某str出现的次数
s = 'hello, how are you?'
print(s.capitalize())
print(s.center(50, '*'))
print(s.count('o', 0, len(s)))
三、关于字符串拼接的方法总结
1.+
str1 = 'hello '
str2 = 'world'
print(str1+str2)
因为字符串为不可变数据类型,则拼接后的新字符串会独占一块新的内存。
拓展:在拼接短的字面值时,由于CPython中的 常数折叠 (constant folding)功能,这些字面值会被转换成更短的形式,例如'a'+'b'+'c' 被转换成'abc','hello'+'world'也会被转换成'helloworld'。这种转换是在编译期完成的,而到了运行期时就不会再发生任何拼接操作,因此会加快整体计算的速度。
常数折叠优化有一个限度,它要求拼接结果的长度不超过20。所以,当拼接的最终字符串长度不超过20时,+号操作符的方式,会比后面提到的join等方式快得多,这与+号的使用次数无关。
2.(格式化字符串)%
print('%s %s' % ('hello', 'world'))
3.join()
用于将序列中的元素以指定的字符连接生成一个新的字符串。
l = ['a','a','a','a']
L1 = ''.join(l) # output is 'aaaa'
L2 = 'b'.join(l) # output is 'abababa'
L3 = '5'.join(l) # output is 'a5a5a5a'
4.format()
Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。
基本语法是通过 {} 和 : 来代替以前的 % 。format 函数可以接受不限个参数,位置可以不按顺序。
# 形式一
print('{0}{1}{0}'.format('a', 'b'))
# 形式二,必须一一对应
print('{}{}'.format('a', 'b'))
# 形式三
print('{name}的年龄是{age}'.format(age=12, name='彩虹然'))
'''
aba
ab
彩虹然的年龄是12
'''
5.f-string
f-string方式出自PEP 498(Literal String Interpolation,字面字符串插值),从Python3.6版本引入。其特点是在字符串前加 f 标识,字符串中间则用花括号{}包裹其它字符串变量。
这种方式在可读性上秒杀format()方式,处理长字符串的拼接时,速度与join()方法相当。
name = 'world'
my_name = '彩虹然'
print(f'Hello {name}, my name is {my_name}.')
# hello world, my name is 彩虹然.