# 3.1 数据结构和序列
image.png
元组
元组 tup 是一种固定长度、不可变的 Python 对象序列。创建元组最简单的办法就是用逗号分隔序列值
元组不可修改
- tuple() # 任意序列或迭代器转换为元组
-
+
来连接元组来生成更长的元组 - print('a = {0}, b = {1}, c = {2}'.format(a, b, c))
- x.count('a') 计算 a 在元组 x 中出现的次数
tup = 1, 2, 3
tup
(1, 2, 3)
列表
与元组不同,列表的长度是可变的,它说包含的内容也是可修改的,可以使用 []
或者 list 类型函数来定义列表
列表可修改
-
zip() 将列表元组或者其它序列的元素配对,新建一个元组构成的列表
-
list.append() 增加元素
-
list.insert(1, 'red') 插入元素到指定位置
-
list.pop(2) 将指定位置的元素移除并返回
-
list.remove('red') 定位一个符合要求的值并移除它
-
list.extend([1, 2]) 向列表中添加多个元素,比 + 这种方式要好。由于在连接过程中创建了新的列表,并且还要复制对象,使用 extend 将元素添加到已经存在的列表是较优的方式
-
list.sort() 排序
- list.sort(key = len) 按照字符长度排序
-
sorted() 返回一个已经排序好的新列表
-
list[start : end] 注意:起始位置 start 是索引包含的,而结束位置 stop 的索引并不包含,因此元素的数量为 end - start
- list[:5] 前五个
- list[3:] 第三个以后的
- list[-4:] 后四个
- list[-6, -2] 倒数第六个到倒数第三个
- list[::2] 步进值在 :: 后面使用,意思是每隔多少个数取一个值
- list[::-1] 将列表或者元组进行翻转
# 左闭右开区间 A B C D E F 0 1 2 3 4 5 6 -6 -5 -4 -3 -2 -1 string[2:4] → [C, D] string[-5: -2] → [B, C, D]
-
enumerate(list) 返回 (i, value) ,其中 value 是元素的值,i 是元素的索引(即位置)
-
zip(a, b) 将列表、元组或者其它序列的元素配对,新建一个元组构成的列表, 当 a, b 序列长度不一致时候,生成的列表长度由最短的决定, 常与 enumerate 同时使用
- enumerate(zip(seq1, seq2))
seq1 = ['foo', 'bar', 'baz'] seq2 = ['one', 'two', 'three'] list(zip(seq1, seq2)) # [('foo', 'one'), ('bar', 'two'), ('baz', 'three')] for i, (a, b) in enumerate(zip(seq1, seq2)): print('{0}: {1}, {2}'.format(i, a, b)) # 0: foo, one # 1: bar, two # 2: baz, three
-
reversed() 将序列的元素倒序排列,reversed 是一个生成器,如果没有实例化(例如使用 list 函数或者进行 for 循环)的时候,他不会产生一个倒序的列表
a_list = [1, 2, 3, None]
a_list
[1, 2, 3, None]
字典
dict( 字典 ) 可能是 Python 内建数据结构中最重要的。它更为常用的名次是哈希表或者关联数组,字典是拥有灵活尺寸的键值对集合,其中键和值都是 Python 对象。用大括号 {} 是创建字典的一种方式,在字典中用逗号将键值对分隔
- del d1['a'] 删除关键字
- d1.pop('a') 删除, pop 在删除的同时返回被删除的值,并删除键
- list(d1.keys()) 输出键
- list(d1.values()) 输出值,顺序与 key 输出的键是一一对应的
- update({'a': 'foo', 'b': 12}) 合并两个字典,如果传给 update() 的数据也含有相同的键,则它将会被覆盖
- dict(zip(range(5), reversed(range(5)))) 将两个序列按照字典配对
- hash() 检查一个对象是否可以哈希化(即是否可以用作字典的键)
empty_dict = {}
d1 = {'a': 'some value', 'b': [1, 2, 3, 4]}
d1
{'a': 'some value', 'b': [1, 2, 3, 4]}
集合
集合是一种无序且元素唯一的容器。类似于字典,但是只有键没有值。集合可以由两种方式创建,通过 set() 函数或者用字面值集与大括号的语法
集合支持数学上的集合操作:联合、交集、差集、对称差集
函数 | 替代方法 | 描述 |
---|---|---|
a.add(x) | N/A | 将元素 x 加入到集合 a 中 |
a.clear(x) | N/A | 将集合重置为空,清空所有元素 |
a.remove(x) | N/A | 从集合 a 中移除某个元素 |
a.pop() | N/A | 移除任意元素,如果集合为空的输出 KerError |
a.union(b) | a | b | a 和 b 中所有的不同的元素 |
a.update(b) | a |= b | 将 a 的内容设置为与 b 的并集 |
a.intersection(b) | a & b | a, b 中同时包含的元素,即交集 |
a.intersection_update(b) | a &= b | 将 a 的内容设置为 a 和 b 的交集 |
a.difference(b) | a - b | a 不在 b 中的元素 |
a.difference_update(b) | a -= b | 将 a 的内容设置为 a 不在 b 中的元素 |
a.symmetric_difference(b) | a^b | 所有在 a 或者 b 中,但不是同时在 a 和 b 中元素 |
a.symmetric_difference_update(b) | a ^= b | 将 a 的内容设置为所有在 a 或者 b 中,但不是同时在 a 和 b 中的元素 |
a.issubset(b) | N/A | 如果 a 包含于 b 返回 True |
a.issuperset(b) | N/A | 如果 a 包含 b 返回 True |
a.isdisjoint(b) | N/A | a, b 没有交集返回 True |
set([2, 2, 2, 1, 3, 3])
{2, 2, 2, 1, 3, 3}
{1, 2, 3}
image如图:
参考链接
- https://docs.swift.org/swift-book/LanguageGuide/CollectionTypes.html
- 《 利用 Python 进行数据分析 》
网友评论