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'

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值