彩虹然

rainbow-ran

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 彩虹然.
posted @ 2020-01-16 15:57  彩虹然  阅读(1036)  评论(0编辑  收藏  举报