[Python笔记] Python内置数据结构之字符串
字符串基础
- 一个个字符组成的有序的序列,是字符的集合;
- 使用单引号、双引号、三引号引住的字符序列;
- 字符串是不可变对象;
- Python3开始,字符串就是Unicode类型;
字符串定义和初始化
str1 = 'abc'
str2 = "asdfg123"
str3 = '''this's a string'''
str4 = 'hello \n lianst.com'
str5 = r"hello \n lianst.com"
str6 = 'c:\windows\nt'
str7 = R"c:\windows\nt"
str8 = 'c:\windows\\nt'
sql = """select * from user where name = 'root'"""
字符串元素访问
字符串是有序的,可迭代的,所以就可以使用下标的方法来访问。
- 使用下标来访问字符串中的元素,下标的值默认是从0开始的。
In [7]: sql = """select * from user where name = 'root'"""
In [8]: sql[5] # 使用下标访问字符串中的元素
Out[8]: 't'
- 字符串是有序的字符集合,是可以迭代的。
In [10]: sql = """select * from user where name = 'root'"""
In [11]: for x in sql:
...: print(x) # 打印遍历出来的值
...: print(type(x)) # 查看遍历出来的值的类型
...:
s
# 可以看到遍历出来的值的类型都是str(字符串类型)
e
l
e
c
t
*
....
字符串拼接
1. join拼接
- 语法:"string".join(iterable)----> str
- 将可迭代的对象连接起来,使用string作为分隔符
- 可迭代对象本身的元素都是字符串
- 拼接完成后将会返回一个新的字符串
In [12]: lst = ['a','b','c']
In [13]: print("\"".join(lst))
a"b"c
In [14]: lst
Out[14]: ['a', 'b', 'c'] # 可以看出来拼接完成后是返回的一个新的字符串,而不是在lst上面修改
In [15]: print(" ".join(lst))
a b c
In [16]: print("\n".join(lst))
a
b
c
In [19]: lst = ['1',['a','b'],'3']
In [20]: print(" ".join(lst))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in ()
----> 1 print(" ".join(lst))
TypeError: sequence item 1: expected str instance, list found
2. +号拼接
- 语法: str1 + str2 --> New str
- 将2个字符串连接(或者叫拼接)在一起
- 拼接成功后会返回一个新的字符串
In [21]: str1 = "abc"
In [22]: str2 = "asdfghjh"
In [23]: str1 + str2
Out[23]: 'abcasdfghjh'
字符串分割
split系列:将字符串按照分隔符分割成若干字符串,并返回列表
。
spiit
- 语法:split(sep=None,maxsplit=-1) -->list of strings
- 按照分隔符从左至右依次分割
- sep指定分割的字符串,默认情况下空白字符串作为分隔符
- maxsplit执行分割的次数,-1表示遍历整个字符串
In [24]: str1 = "i'm \ta super student."
In [25]: str1.split()
Out[25]: ["i'm", 'a', 'super', 'student.']
In [26]: str1.split('s')
Out[26]: ["i'm \ta ", 'uper ', 'tudent.']
In [27]: str1.split('super')
Out[27]: ["i'm \ta ", ' student.']
In [28]: str1.split(' ')
Out[28]: ["i'm", '\ta', 'super', 'student.']
In [30]: str1.split(' ',maxsplit=2)
Out[30]: ["i'm", '\ta', 'super student.']
In [31]: str1.split('\t',maxsplit=2)
Out[31]: ["i'm ", 'a super student.']
rspiit
- 语法:rsplit(sep=None,maxsplit=-1) -->list of strings
- 按照分隔符从右至左依次分割
- sep指定分割的字符串,默认情况下空白字符串作为分隔符
- maxsplit执行分割的次数,-1表示遍历整个字符串
In [38]: str1 = "i'm \ta super student."
In [39]: str1.rsplit()
Out[39]: ["i'm", 'a', 'super', 'student.']
In [40]: str1.rsplit('s')
Out[40]: ["i'm \ta ", 'uper ', 'tudent.']
In [41]: str1.rsplit('super')
Out[41]: ["i'm \ta ", ' student.']
In [43]: str1.rsplit(' ')
Out[43]: ["i'm", '\ta', 'super', 'student.']
In [44]: str1.rsplit('\t',maxsplit=2)
Out[44]: ["i'm ", 'a super student.']
splitlines
- 语法:splitlines([keepends]) --> list of strings
- 按照行来切分字符串
- keepends值的是是否保留行分隔符
- 行分隔符包括\n,\r\n,\r等
In [46]: 'ab c\n\nde fg\rkl\r\n'.splitlines()
Out[46]: ['ab c', '', 'de fg', 'kl']
In [47]: 'ab c\n\nde fg\rkl\r\n'.splitlines(True)
Out[47]: ['ab c\n', '\n', 'de fg\r', 'kl\r\n']
In [48]: str1 = '''I'm a super student.'''
In [49]: str1 = '''I'm a super student.
...: You're a super teacher.'''
In [50]: print(str1)
I'm a super student.
You're a super teacher.
In [51]: print(str1.splitlines())
["I'm a super student.", "You're a super teacher."]
In [52]: print(str1.splitlines(True))
["I'm a super student.\n", "You're a super teacher."]
-----------------------------------------------------------------------------------------------------
partition系列: 将字符串按照分割分分割成2段,返回这2段和分隔符的元组
。
partition
- 语法:partition(sep) -->(head,seq,tail)
- 从左至右,遇到分隔符就把字符串分割成两部分,返回头、分隔符、尾三部分的三元组;
- 如果没有找到分隔符,就返回头、2个空元素的三元组;
- sep分割字符串,必须指定。
In [53]: str1 = "I'm a super student."
In [54]: str1.partition('s') # 以's'为分隔符分割
Out[54]: ("I'm a ", 's', 'uper student.')
In [56]: str1.partition('stu') # 以'stu'为分隔符分割
Out[56]: ("I'm a super ", 'stu', 'dent.')
In [57]: str1.partition('') # 没有制定分隔符是会抛异常的,因为sep是必须指定的
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
in ()
----> 1 str1.partition('')
ValueError: empty separator
In [58]: str1.partition('abc') # 以'abc'为分隔符来分割,因为str1字符串中没有'abc',所以就返回头和2个空元素的三元组
Out[58]: ("I'm a super student.", '', '')
字符串大小写
字符串排版
字符串修改
字符串查找
字符串判断
字符串格式化