Python字符串
字符串本质:字符序列。Python中字符串不可变。
1. 引用创建字符串
- 通过单引号、双引号创建字符串
>>> a = "CSDN"
>>> print(a)
CSDN
>>> b = 'my_name is "CSDN"'
>>> print(b)
my_name is "CSDN"
- 使用三个单引号或三个双引号,创建多行字符串
>>> xinxi = ''' name = "123"
... age = 18
... lover = "CSDN"
... qq = 123456789 '''
>>> print(xinxi)
name = "123"
age = 18
lover = "CSDN"
qq = 123456789
2. 空字符串和len()函数
- 允许存在空字符串,不包含任何字符且长度为0
>>> a = ''
>>> len(a)
0
- len()用于计算字符串包含多少字符
>>> a = 'CSDN'
>>> len(a)
4
3. 转义字符
使用+特殊字符,实现某些难以用字符表示的效果
转义字符 | 描述 |
---|---|
\ | 续行符 |
\ | 反斜杠符号 |
\’ | 单引号 |
\" | 双引号 |
\b | 退格 |
\t | 换行 |
\t | 横向制表符 |
\r | 回车 |
4. 字符串拼接
可以用+将多个字符串拼接起来。
- 如果+两边都是字符串,则拼接
- 如果+两边都是数字,做加法运算
- 如果+两边类型不同,则抛出异常
>>> a = 'abc'+'def'
>>> a
'abcdef'
可以把多个字面字符串直接放到一起实现拼接,例如:‘aa’ ‘bb’ 结果为’aabb’
>>> a = 'abc''def'
>>> a
'abcdef'
5. 字符串复制
- 使用*可以实现字符串的复制操作
>>> a= 'abc'*3
>>> print(a)
abcabcabc
6. 从控制台读取字符串
- 通过input()从控制台读取键盘输入的内容
>>> myname = input("请输入名字:")
请输入名字:CSDN
>>> myname
'CSDN'
7. str()实现数字转型字符串
>>> str(3.14e2)
'314.0'
>>> str(3.14)
'3.14'.
8. 使用[]提取字符
- 通过在字符串后面添加[],在[]中指定偏移量,可以提取该位置的单个字符
- 最左侧第一个字符,偏移量为0,以此类推,直至len(str)-1
- 最右侧第一个字符,偏移量为-1,倒数第二个为-2,以此类推,直至-len(str)
>>> a='abcdefghijklmn'
>>> a[0]
'a'
>>> a[2]
'c'
>>> a[14-1]
'n'
9. replace()实现字符串替换
- 字符串是不可改变的,通过[]获取指定位置字符,但是无法更改字符串,尝试更改会报错
- 通过replace()可以替换字符串中的某些字符,这时只能创建新的字符串来实现
>>> a='abcdefghijklmn'
>>> a
'abcdefghijklmn'
>>> a = a.replace('c','钱')
>>> a
'ab钱defghijklmn'
# 整个过程中,实际上是创建了新的字符串对象,并指向a,而不是修改了以前的字符串
10. 字符串切片slice操作
-
切片使我们能够快速提取字符串,标准格式为:起始偏移量:终止偏移量:步长
-
切片时,起始和终止不在范围内,也不会报错,起始偏移量小于0会当做0,终止偏移量大于“长度-1”会被当做-1。
描述 实例 结果 [:] 提取整个字符串 “abcdef” [:] “abcdef” [start:] 从start索引开始到结尾 “abcdef” [2:] “cdef” [:end] 从头开始直到end-1 “abcdef” [:2] “ab” [start:end] 从start开始直到end-1 “abcdef” [2:4] “cd” [start🔚step] 从start开始直到end-1,步长是step “abcdef” [1:5:2] “bd” -
为负数的情况:
例 说明 结果 abcdef"[-3] 倒数三个 “def” abcdef"[-5:-3] 倒数第五个到倒数第三个(包头不包尾) “bc” abcdef"[::-1] 步长为负,从右到左反向提取 “fedcba”
11. split()分割和join()合并
- split()可以基于指定分隔符将字符串分割成多个字字符串(存储在列表中)。如果不指定分隔符,则默认使用空白字符。
>>> a = "ab cd ef gh"
>>> a.split()
['ab', 'cd', 'ef', 'gh']
>>> a.split('cd')
['ab ', ' ef gh']
- join()的作用和split()相反,用于将一系列子字符串连接起来
>>> a = ['123','abc123','abc456']
>>> '*'.join(a)
'123*abc123*abc456'
- 拼接字符串的特点
使用+,会产生新的字符串对象,使用join函数,会计算所有字符串长度,然后逐一拷贝,仅创建一次对象。 - 操作(测试+和join的效率)
# +
import time
time01 = time.time()
a = ""
for i in range(1000000):
a += "abc"
time02 = time.time()
print("运算时间:"+str(time02-time01))
# 运算时间:1.0699288845062256
# join
import time
time03 = time.time()
bc = []
for i in range(1000000):
bc.append("abc")
a = "".join(bc)
time04 = time.time()
print("运算时间:"+str(time04-time03))
#运算时间:0.17992210388183594
显而易见,将abc运算100万次后二者运算效率还是有很大差别的。join效率大于+
12. 字符串驻留机制
- 仅保存一份相同且不可变字符串的方法,不同的值会被存放在字符串驻留池中。对于符合标识符规则的字符串会启用字符串驻留机制。
13. 大小写转换
示例 | 说明 |
---|---|
a.capitalize() | 产生新的字符串,字符串首字母大写 |
a.title() | 产生新的字符串,每个单词都首字母大写 |
a.upper() | 产生新的字符串,所有字符全部转换为大写 |
a.lower() | 产生新的字符串,所有字符全部转换为小写 |
a.swapcase() | 产生新的字符串,所有字符大小写转换 |
14. 字符串格式化
- format(),增强了格式化功能
>>> a = "名字是:{0},年龄是:{1}"
>>> a.format("张三",18)
'名字是:张三,年龄是:18'
>>> b = "名字是:{name},年龄是:{age}"
>>> b.format("age=18",name='张三')
'名字是:张三,年龄是:18'
- 填充和对齐
填充常跟对齐一起使用
……、<、>分别是居中、左对齐、右对齐,后面带宽度
:号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充
>>> "{:*>8}".format("123")
'*****123'
15. 数字格式化
浮点数通过f,整数通过d进行需要的格式化。
>>> a = "名字是:{0},存款有:{1:.2f}"
>>> a.format("张飞",3.1415926)
'名字是:张飞,存款有:3.14'
16. 可变字符串
- 需要修改字符串中的值,但是不改变对象,可以用io.StringIO对象或array模块
>>> s = "hello,abc"
>>> sio = io.StringIO(s)
>>> sio.getvalue()
'hello,abc'
>>> sio.seek(8)
8
>>> sio.write("g")
1
>>> sio.getvalue()
'hello,abg'