一, 基础知识
在 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'也会被转换成'hello world'. 这种转换是在编译期完成的, 而到了运行期时就不会再发生任何拼接操作, 因此会加快整体计算的速度.
常数折叠优化有一个限度, 它要求拼接结果的长度不超过 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 谢欣然.
来源: http://www.bubuko.com/infodetail-3383491.html