Python基础数据类型(list,tuple,dict,set)
作者Lou Xiao创建时间2020-05-03 11:13:00更新时间2020-05-09 17:22:00
本节课介绍
本节课介绍常用的集合(collections):list、tuple、set、dict。
- collections就是容纳(管理)一组元素的容器,不仅能方便地解决问题,还具有良好的性能,用好collections能够编写性能更好、功能更强的程序;
- collections是Python的重要基础知识点。
- 更多强大的collections 👉 [collections]
预备知识点
❶ Python:一切都是object。
❷ object的immutable属性 👉 [immutable]
An object with a fixed value. immutable(不可变)和mutable(可变)
- immutable的类型:
- int、 str、 None、 bool、
- tuple(嵌套的元素全部都是immutable)
- mutable的类型:
list、 set、 dict
❸ object的hashable属性 👉 [hashable]
An object is hashable if it has a hash value which never changes during its lifetime
and can be compared to other objects
Python的内置的immutable类型都是hashable
hashable的类型:
- int、 str、 None、 bool;
- tuple(嵌套的元素全部都是hashable);
- 默认情况下,由用户定义的Class的object;
not hashable的类型:
- list
- set
- dict
list、tuple、set、dict通用方法
方法 | 说明 |
---|---|
len() | 查看collection元素个数 |
x in collection | 判断collection是否包含元素x 对于dict:检查是否包含key==x |
collection[index] | 获取位置index上的元素;set不支持 |
迭代(遍历) | for x in collection:print(x) for key in dict.keys():print(key) for val in dict.values():print(val) for key, val in dict.items():print(key,val) |
list(列表) 👉 [list]
list就是容纳一组有序的元素(object)的容器。类似于其他语言的数组Array。
- 特点
- list是mutable
- 元素类型是任何类型
- 元素按照顺序存放
❶ 创建list
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
# 1 使用符号[]
2
a = []
3
# 2
4
b = [1, 2, 3]
5
# 3 Using a list comprehension
6
c = [x for x in b]
7
# 4 list()
8
d = list(b)
9
# 5 混合模式
10
e = ["a", 1, [1, 2, 3]]
❷ 增删改查
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
# 增
2
a = [1, 2, 3]
3
a.append(5)
4
print(a)
5
a.insert(0, 99)
6
print(a)
7
# 删
8
a = [1, 2, 3]
9
a.pop()
10
del a[0]
11
# 改
12
a = [1, 2, 3]
13
a[1] = "123"
14
print(a)
15
# 查
16
print(a[2])
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
[1, 2, 3, 5]
2
[99, 1, 2, 3, 5]
3
[1, '123', 3]
4
3
❸ 索引(下标)
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
#索引 0 1 2 3 4 5 6 7 8
2
#索引-9 -8 -7 -6 -5 -4 -3 -2 -1
3
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
4
## 1
5
print(a[0])
6
print(a[-1])
7
## 2 [2,4) 从2到4(不包括4),步长1
8
print(a[2:4])
9
## 3 [2,8) 从2到8(不包括8),步长2
10
print(a[2:8:2])
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
1
2
9
3
[3, 4]
4
[3, 5, 7]
❹ 嵌套
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
a = [1, 2, 3]
2
b = [4, 5, 6]
3
c = [a, b]
4
print(c)
5
# 修改 a 之后
6
a.append(10)
7
print(c)
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
[[1, 2, 3], [4, 5, 6]]
2
[[1, 2, 3, 10], [4, 5, 6]]
❺ 遍历
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
a = [1, 2, 3, 4, 5]
2
for n in a:
3
print(n)
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
1
2
2
3
3
4
4
5
5
元组(tuple) 👉 [tuple]
tuple 是不可变版本(immutable)的list。
- 特点
- tuple是immutable
- 元素类型是任意类型
- 元素按照顺序存放
❶ 创建
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
# 1 使用符号()
2
a = (1) # \(wrong)不是元组
3
print(type(a), a)
4
a = (1,) # \(correct)
5
print(type(a), a)
6
a = (1,2,3)
7
print(type(a), a)
8
a = 1, 2, 3
9
print(type(a), a)
10
# 2 使用tuple()
11
a = tuple([1,2,3])
12
print(type(a), a)
❷ 拆分(解构)
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
score = (1, 2, 3, 4)
2
a, b, c, d = score
3
print(a, b, c, d)
4
# list同样适用
5
score = [1, 2, 3, 4]
6
a, b, c, d = score
7
print(a, b, c, d)
8
# 应用举例(交换数字)
9
a = 1
10
b = 2
11
a, b = b, a
12
print(a, b)
❸ list、tuple嵌套
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
a = [
2
(1, 2, [3, 4, (5, 6)])
3
]
4
print(a)
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
[(1, 2, [3, 4, (5, 6)])]
❹ 遍历
与list类似
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
a = (1, 2, 3, 4, 5)
2
for n in a:
3
print(n)
set(集合) 👉 [Set]
set 类似于数学概念上的集合
A set object is an unordered collection of distinct hashable objects.
- 特点:
- set是mutable
- 元素是hashable
- 元素是唯一的(自动去重)
- 元素存放是无顺序的
❶ 创建方法
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
# 1 使用{}
2
a = {} # 错误!不是set,而是 dict
3
a = {1, 2, 3} # 正确!
4
print(a)
5
# 2 使用set()
6
a = set()
7
a = set([1, 2, 3, 3, 4])
8
a = set((1, 2, 3, 3, 4))
9
print(a)
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
{1, 2, 3}
2
{1, 2, 3, 4}
❷ 运算
运算 | 函数 | 示例 |
---|---|---|
大小 | len() | len(set([1,2,3])) AlBeRt63EiNsTeIn 3 |
包含 | in | 2 in set([1,2,3]) AlBeRt63EiNsTeIn True 5 in set([1,2,3]) AlBeRt63EiNsTeIn False |
交集 | & | set((1, 2, 3)) & set((3, 4, 5)) AlBeRt63EiNsTeIn {3} |
并集 | | | set((1, 2, 3)) | set((3, 4, 5)) AlBeRt63EiNsTeIn {1, 2, 3, 4, 5} |
差集 | - | set((1, 2, 3)) - set((3, 4, 5)) AlBeRt63EiNsTeIn {1, 2} |
symmetric_difference | ^ | set((1, 2, 3)) ^ set((3, 4, 5)) AlBeRt63EiNsTeIn {1, 2, 4, 5} |
dict(字典) 👉 [dict]
dict 顾名思义,查找数据就像查字典一样,根据词(key) 找到 词义解释(value)
字典就是一个 (key, value) 的组合。
类似于其它编程语言的map、HashMap
- 特点:
- dict是mutable
- key必须是hashable
- key必须唯一(自动去重)
- key存放是无顺序
- value没有任何约束
❶ 创建字典 👉 [Python文档]
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
# 1 使用{}
2
d = {
3
1: "Ha Ha",
4
"ha": 'happy',
5
(5, 6, 7): 5 + 6 + 7,
6
}
7
print(d)
8
# 2 使用dict()
9
d = dict(one=1, two=2, three=3)
10
print(d)
11
d = dict((
12
(1, "Ha Ha"),
13
("ha", "happy"),
14
((5, 6, 7), 5 + 6 + 7),
15
))
16
print(d)
17
# 3 复杂的示例
18
d = {
19
None: 'None',
20
True: 'True',
21
False: 'False',
22
'name': 'ming',
23
'age': 1.5,
24
'favorite': ['running', 'ping-pong', 'singing'],
25
'others': {
26
'address': ['Chao Yang', 'Beijing', 'China'],
27
},
28
(1, 2, 3): [5, 6, 7],
29
}
30
print(d)
演示结果
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
{1: 'Ha Ha', 'ha': 'happy', (5, 6, 7): 18}
2
{'one': 1, 'two': 2, 'three': 3}
3
{1: 'Ha Ha', 'ha': 'happy', (5, 6, 7): 18}
4
{None: 'None', True: 'True', False: 'False', 'name': 'ming', 'age': 1.5, 'favorite': ['running', 'ping-pong', 'singing'], 'others': {'address': ['Chao Yang', 'Beijing', 'China']}, (1, 2, 3): [5, 6, 7]}
❷ CRUD(增删改查)
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
# 1 增
2
d = {"one": 1, "two": 2, "three": 3}
3
d["four"] = 4
4
print(d)
5
# 2 删
6
d = {"one": 1, "two": 2, "three": 3}
7
del d["two"]
8
print(d)
9
# 3 改
10
d = {"one": 1, "two": 2, "three": 3}
11
d["one"] = 5
12
print(d)
13
d = {"one": 1, "two": 2, "three": 3}
14
e = {"one": 8, "two": 9, "six": 3}
15
d.update(e)
16
print(d)
17
# 4 查
18
d = {"one": 1, "two": 2, "three": 3}
19
print(d["one"])
20
print(d.get("five", 99))
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
{'one': 1, 'two': 2, 'three': 3, 'four': 4}
2
{'one': 1, 'three': 3}
3
{'one': 5, 'two': 2, 'three': 3}
4
{'one': 8, 'two': 9, 'three': 3, 'six': 3}
5
1
6
99
❸ 遍历
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
d = {"one": 1, "two": 2, "three": 3}
2
for k, v in d.items():
3
print(k, v)
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
one 1
2
two 2
3
three 3
collections 的性能优劣 👉 [TimeComplexity]
time-complexity (aka "Big O" or "Big Oh") of various operations in current CPython
时间复杂描述了操作(operation)的时间成本O 与 collections的大小n 之间的关系。即O是n的函数。
O(1) 常亮,性能最好; O($ n^3 $) 性能最差; O数字越小,性能越好。
❶ list
operation | 平均情况(好+坏) | 最坏情况 | 说明 |
---|---|---|---|
len() | O(1) | ||
增删尾部数据 | O(1) | O(1) | 推荐,在list尾部进行增删 |
增删非尾部数据 | O(n) | O(n) | 不推荐这样做,会导致该位置后边的元素都要移动一次 |
sort | O(n log n) | O(n log n) | 不好不坏,唯一选择 |
x in s | O(n) | 在list中查找某数据,最好用set替换list | |
min(s), max(s) | O(n) |
❷ set
operation | 平均情况(好+坏) | 最坏情况 | 说明 |
---|---|---|---|
len() | O(1) | ||
增删数据 | O(1) | O(1) | |
x in s | O(1) | ||
min(s), max(s) | ? |
❸ dict
operation | 平均情况(好+坏) | 最坏情况 | 说明 |
---|---|---|---|
len() | O(1) | ||
x in s | O(1) | O(n) | 涉及到key的查找,一般可以认为是O(1) |
Get Item | O(1) | O(n) | 涉及到key的查找,一般可以认为是O(1) |
Set Item | O(1) | O(n) | 涉及到key的查找,一般可以认为是O(1) |
Del Item | O(1) | O(n) | 涉及到key的查找,一般可以认为是O(1) |
Copy | O(n) | O(n) | |
Iteration | O(n) | O(n) | 遍历 |
文章目录