Python的内置数据结构

所谓数据结构,通俗来说就是存储数据的容器。Python内置的基本数据结构可以分成序列、映射以及集合这三类。

一、序列(列表、元组和字符串)

序列中的每个元素都有自己的编号。

1、列表

列表使用方括号。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# -*- coding: utf-8 -*-
a = [11, 99, 33, 69, 77, 88, 55, 11, 33, 36, 39, 66, 44, 22]
print(type(a))

##################################
# 列表的查询与统计
##################################

print(len(a)) # 列表元素个数
print(max(a)) # 返回列表元素最大值
print(min(a)) # 返回列表元素最小值
print(a.count(11)) # 统计某个元素在列表中出现的次数
print(a.index(99)) # 从列表中找出某个值第一个匹配项的索引位置
print(a[0:2]) # 返回切片

##################################
# 列表的变换与修改
##################################

a.append(123) # 在列表末尾添加新的元素
a = a + [321]
print(a)
a.extend([45, 56, 67, 78]) # 在列表末尾一次性追加另一个序列中的多个元素
a = a + [99, 88, 77]
print(a)
a.insert(2, 333) # 在列表指定位置插入元素
print(a)

a.pop(0) # 移除列表中指定位置的一个元素(头部元素)
print(a)
a.pop(-1) # 移除列表中指定位置的一个元素(末尾元素)
print(a)
a.pop() # 移除列表中指定位置的一个元素(默认移除的是末尾元素)
print(a)
a.remove(33) # 移除列表中某个值的第一个匹配项
print(a)

a.reverse() # 反向列表中元素
print(a)

a.sort(reverse=True) # 对原列表进行降序排序
print(a)
a.sort(reverse=False) # 对原列表进行升序排序
print(a)

2、元组

元组使用小括号。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# -*- coding: utf-8 -*-

a = (11, 99, 33, 69, 77, 88, 55, 11, 33, 36, 39, 66, 44, 22)

print(type(a))

##################################
# 元祖的查询与统计
##################################

print(len(a)) # 元祖元素个数
print(max(a)) # 返回元祖元素最大值
print(min(a)) # 返回元祖元素最小值
print(a.count(11)) # 统计某个元素在元祖中出现的次数
print(a.index(99)) # 从元祖中找出某个值第一个匹配项的索引位置
print(a[0:2]) # 返回切片

##################################
# 元祖的组合
##################################

a = a + (33, 44, 55)
print(a)

3、字符串

字符串使用引号。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# -*- coding: utf-8 -*-

a = "hello world!"

print(type(a))

##################################
# 字符串的查询与统计
##################################

print(len(a)) # 字符串长度
print(a.count('s')) # 计算指定字符串或字符出现的次数
print(a.find('o')) # 根据指定的字符获取该字符在字符串中第一次出现的索引位置(
print(a.index('o')) # 从字符串中找出第一个匹配项的索引起始位置
print(a[2]) # 返回指定位置的内容
print(a[0:2]) # 返回切片

##################################
# 字母大小写变换
##################################

a = a.capitalize() # 首字母大写
print(a)
a = a.title() # 每个单词首字母大写
print(a)
a = a.upper() # 每个字母变为大写
print(a)
a = a.lower() # 每个字母变为小写
print(a)
a = a.swapcase() # 大小写互换
print(a)

##################################
# 字符串检测
##################################

print(a.startswith('h')) # 检测字符串是否以指定字符开头
print(a.endswith('!')) # 检测字符串是否以指定字符结尾
print(a.isupper()) # 检测字符串是否都为大写字母
print(a.islower()) # 检测字符串是否都为小写字母
print(a.istitle()) # 检测字符串是否都为单词首字母大写

print(a.isdigit()) # 检测字符串是否全是数字字符
print(a.isnumeric()) # 检测字符串是否全是数字字符
print(a.isalnum()) # 检测字符串是否全是字母和数字字符
print(a.isalpha()) # 检测字符串是否全是字母字符(含中文字符)
print(a.isspace()) # 检测字符串是否由空白字符组成

##################################
# 字符串分割和合并
##################################

b = a.split(' ') # 使用指定字符将字符串进行切割并装入列表
print(b)
a = a + 'end' # 字符串合并
print(a)

##################################
# 字符串填充
##################################

print(a.zfill(30)) # 使用0将字符串居中填充到指定长度
print(a.center(30, 'o')) # 用指定字符将字符串居中填充到指定长度
print(a.ljust(30, 'o')) # 用指定字符将字符串左对齐填充到指定长度
print(a.rjust(30, 'o')) # 用指定字符将字符串右对齐填充到指定长度

##################################
# 字符串去重
##################################

print(a.strip()) # 去掉字符串中两侧空格
print(a.lstrip()) # 去掉字符串中左侧空格

##################################
# 字符串替换
##################################

print(a.replace('H','h')) # 字符替换

##################################
# 字符串和二进制串的相互转换
##################################

def bin_encode(s):
return ' '.join([bin(ord(c)).replace('0b', '') for c in s])

def bin_decode(s):
return ''.join([chr(i) for i in [int(b, 2) for b in s.split(' ')]])

print(bin_encode('hello中国'))
# '1101000 1100101 1101100 1101100 1101111 100111000101101 101011011111101'
print(bin_decode('1101000 1100101 1101100 1101100 1101111 100111000101101 101011011111101'))
# 'hello中国'

二、映射(字典)

字典(也叫散列表)使用大括弧,特点是具有键。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# -*- coding: utf-8 -*-

a = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}

print(type(a))

##################################
# 字典的查询与统计
##################################

print(len(a)) # 字典长度
print(a['Name']) # 查询某个键的值
print(a.get('Name')) # 查询某个键的值

print([j for i,j in a.items()]) # 以列表返回可遍历的(键,值)元组数组
print([i for i in a.keys()]) # 打印字典的键
print([i for i in a.values()]) # 打印字典中键的值

a1 = {'a': 3, 'b': 7, 'c': 9}
print(sorted(a1.items(), key=lambda x:x[1], reverse=True)) # 字典按键值排序
print({k:v for k, v in sorted(a1.items(), key=lambda x:x[1], reverse=True)})

a2 = {'Z': 9.99, 'Y': 9.99, 'X': 9.99}
print({key:a2[key] for key in sorted(a2.keys())}) # 字典按键名排序

##################################
# 字典的修改
##################################

a.setdefault('apple', None) # 如果如果键不存在于字典中将会添加键并将值设为给定的默认值
print(a)
a.update({'Age':19}) # 将给定的键/值对更新到字典中
print(a)
a.pop('Age') # 将字典中特定的键/值对删除
print(a)
b = dict(zip(a.values(), a.keys())) # 键/值对反转
print(b)

三、集合

集合是无序的不重复元素序列。它可以通过大括号”{}”(没有键)或者”set()”来创建,如果是空集只能用”set()”创建。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# -*- coding: utf-8 -*-

a = {1, 2, 3, 4, 5, 6, 7}
b = set([1, 2, 3])

print(type(a))
print(type(b))

##################################
# 集合的查询与统计
##################################

print(len(a)) # 集合长度
print(a) # 打印集合
print([i for i in a]) # 遍历集合返回元素列表

##################################
# 集合的运算
##################################

print(a - b) # 返回集合a中包含而集合b中不包含的元素构成的集合
print(a | b) # 返回集合a或b中包含的所有元素构成的集合
print(a & b) # 返回集合a和b中都包含了的元素构成的集合
print(a ^ b) # 返回不同时包含于a和b的元素构成的集合

##################################
# 集合的修改
##################################

a.add(10) # 添加单个元素
print(a)
a.update([11, 12 ,13]) # 添加多个元素
print(a)

a.remove(10) # 移除制定元素,如果元素不存在则会发生错误
print(a)
a.discard(10) # 移除制定元素,即时元素不存在也不会发生错误
print(a)
print(a.pop()) # 随机删除集合中的一个元素, 返回删除的那个元素
print(a)

a.clear() # 清空集合
print(a)