Python3 数据类型

字符串

获取长度

1>>> s = 'spam'
2>>> len(s)
34

正向索引

1>>> s
2'spam'
3>>> s[0]
4's'
5>>> s[1]
6'p'

反向索引

Python 字符串支持反向索引:

1>>> s
2'spam'
3>>> s[-1]
4'm'
5>>> s[-4]
6's'

s[-1]s[len(s) - 1] 是等效的。

切片(Slice)

 1>>> s
 2'spam'
 3>>> s[1:3]
 4'pa'
 5>>> s[1:]
 6'pam'
 7>>> s[:3]
 8'spa'
 9>>> s[:-1]
10'spa'
11>>> s[:]
12'spam'

拼接

1>>> s
2'spam'
3>>> s + 'xyz'
4'spamxyz'
5>>> s
6'spam'
7>>> s * 8
8'spamspamspamspamspamspamspamspam'

Note:

  • 加号 + 对于不同对象具有不同的操作语义:用于数字表示加法,用于字符串表示拼接。这个特性称为多态,一个操作的语义取决于具体的操作对象。

不可变性

Python的字符串是不可变的,字符串一旦被创建后,则不能被修改,只能新建新的字符串。

1>>> s
2'spam'
3>>> s[0] = 'z'
4Traceback (most recent call last):
5  File "<stdin>", line 1, in <module>
6TypeError: 'str' object does not support item assignment
7>>> s = 'z' + s[1:]
8>>> s
9'zpam'

Note:

  • Python 中的每个对象要么是可变的要么是不可变的。
  • Python 核心类型中,数值、字符串和元组是不可变的;而列表、字典、集合是可变的。

字符串方法

字符串可以使用 find() 方法查找子字符串:

1>>> s = 'spam'
2>>> s.find('pa')
31

字符串的 replace() 方法可以对字符串进行全局查找和替换(并不会修改原始字符串):

1>>> s
2'spam'
3>>> s.replace('pa', 'XYZ')
4'sXYZm'
5>>> s
6'spam'

split() 方法可以通过分隔符将字符串拆分成子字符串列表:

1>>> line = 'aaa,bbb,ccccc,dd'
2>>> line.split(',')
3['aaa', 'bbb', 'ccccc', 'dd']

转换大小写:

1>>> s = 'Spam'
2>>> s.upper()
3'SPAM'
4>>> s.lower()
5'spam'

去除空白字符:

1>>> line = 'aaa,bbb,ccccc,dd\\n'
2>>> line.rstrip()
3'aaa,bbb,ccccc,dd'
4>>> line
5'aaa,bbb,ccccc,dd\\n'
6>>> line.rstrip().split(',')
7['aaa', 'bbb', 'ccccc', 'dd']

判断字符串是否全为字母或全为数字:

 1>>> '123'.isdigit()
 2True
 3>>> '123'.isnumeric()
 4True
 5>>> 'abc'.isalpha()
 6True
 7>>> 'abc123'.isalnum()
 8True
 9>>> 'abc'.islower()
10True
11>>> 'ABC'.isupper()
12True

格式化

 1>>> '%s, eggs, and %s' %('spam', 'SPAM!')
 2'spam, eggs, and SPAM!'
 3>>> '{0}, eggs, and {1}'.format('spam', 'SPAM!')
 4'spam, eggs, and SPAM!'
 5>>> '{}, eggs, and {}'.format('spam', 'SPAM!')
 6'spam, eggs, and SPAM!'
 7>>> name = 'World'
 8>>> f'Hello, {name}!'
 9'Hello, World!'
10>>> 'Hello, {name}'
11'Hello, {name}!
12>>> '{:,.2f}'.format(296999.2567)
13'296,999.26'
14>>> '%.2f | %+05d' %(3.14159, -42)
15'3.14 | -0042''

其他

1>>> s = 'A\\nB\\tC'
2>>> s
3'A\\nB\\tC'
4>>> s = 'A\\0B\\0C'
5>>> s
6'A\\x00B\\x00C'
  • Python 的字符串可以使用单引号、双引号或三个引号(单引号或双引号)表示,推荐使用单引号。

  • Python 支持原始(raw)字符串字面量,即去掉反斜杠转义机制。

    1>>> s =  r'A\\nB\\tC'
    2>>> s
    3'A\\\\nB\\\\tC'
    4>>> len(s)
    57
    

模式匹配

1>>> import re
2>>> match = re.match('Hello[ \\t]*(.*)world', 'Hello    Python world')
3>>> match.group()
4'Hello    Python world'
5>>> match.group(1)
6'Python '

列表

列表(List)是一个可变对象,可以对列表进行索引、切片、拼接等操作。

将列表当作栈使用

1stack = [3, 4, 5]
2stack.append(6)   # 入栈
3top = stack.pop() # 出栈

将列表当作队列使用

1from collections import deque
2
3q = deque([1, 2, 3]) # 初始化双边队列
4q.appendleft(0)      # 从左边入队
5q.append(4)          # 从右边入队
6left = q.popleft()   # 从左边出队
7right = q.pop()      # 从右边出队

排序

列表的 sort() 方法可以进行原地排序,而 reverse() 方法可以对列表进行翻转。

1>>> words = ['Hello', 'World', 'Python']
2>>> words.sort()
3>>> words
4['Hello', 'Python', 'World']
5>>> words.reverse()
6>>> words
7['World', 'Python', 'Hello']

嵌套列表

1>>> mat = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
2>>> mat
3[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

列表推导式

列表推导式(List Comprehension Expression)提供了一个处理序列的高级操作。

 1>>> vec = [2, 4, 6]
 2>>> [3 * x for x in vec]
 3[6, 12, 18]
 4>>> [3 * x for x in vec if x > 3]
 5[12, 18]
 6>>> [3 * x for x in vec if x < 3]
 7[6]
 8>>> vec1 = [2, 4, 6]
 9>>> vec2 = [4, 3, -9]
10>>> [x * y for x in vec1 for y in vec2]
11[8, 6, -18, 16, 12, -36, 24, 18, -54]
12>>> [x + y for x in vec1 for y in vec2]
13[6, 5, -7, 8, 7, -5, 10, 9, -3]
14>>> [vec1[i] * vec2[i] for i in range(len(vec1))]
15[8, 12, -54]
16>>> [str(round(355 / 113, i)) for i in range(1, 6)]
17['3.1', '3.14', '3.142', '3.1416', '3.14159']
18>>> fresh_fruit = ['  banana', '  loganberry ', 'passion fruit  ']
19>>> [weapon.strip() for weapon in fresh_fruit]
20['banana', 'loganberry', 'passion fruit']

元组

元组(Tuple)是一个不可变序列对象,元组提供了一种完整性约束。

集合

  • 可以用 {} 创建一个非空集合
  • 如果要创建一个空的集合,必须要用 set() 而不能用大括号 {},因为 {} 会创建一个空的字典而非集合
  • 集合也支持推导式

字典

 1# 使用items()方法遍历字典
 2my_dict = {'one': 1, 'two': 2, 'three': 3}
 3for k, v in my_dict.items():
 4    print(k, v, sep=':')
 5
 6# 使用enumerate()函数遍历列表
 7my_list = ['one', 'two', 'three']
 8for i, v in enumerate(my_list, 1):
 9    print(v, i, sep=':')
10
11# 多个列表可以使用zip遍历
12questions = ['name', 'age', 'favorite color']
13answers = ['python', '18', 'red']
14for q, a in zip(questions, answers):
15    print("What's your {0}? It's {1}.".format(q, a))
上一页
下一页