[Python笔记] Python内置数据结构之字符串

@lianst  May 11, 2018

字符串基础

- 一个个字符组成的有序的序列,是字符的集合;
- 使用单引号、双引号、三引号引住的字符序列;
- 字符串是不可变对象;
- 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.", '', '')

字符串大小写


字符串排版


字符串修改


字符串查找


字符串判断


字符串格式化



添加新评论