用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用
*号操作符,可以将元组解压为列表。
zip(iter1 [,iter2 [...]]) --> zip object
print(zip(range(3), 'ABC')) # ➊ zip 函数返回一个生成器,按需生成元组。
#
print(list(zip(range(3), 'ABC'))) # ➋ 为了输出,构建一个列表;通常,我们会迭代生成器。
# [(0, 'A'), (1, 'B'), (2, 'C')]
print(list(zip(range(3), 'ABC', [0.0, 1.1, 2.2, 3.3]))) # ➌ zip 有个奇怪的特性:当一个可迭代对象耗尽后,它不发出警告就停止。
# [(0, 'A', 0.0), (1, 'B', 1.1), (2, 'C', 2.2)]
from itertools import zip_longest
# ➍ itertools.zip_longest 函数的行为有所不同:使用可选的fillvalue(默认值为 None)填充缺失的值,因此可以继续产出,直到最长的可迭代对象耗尽。
print(list(zip_longest(range(3), 'ABC', [0.0, 1.1, 2.2, 3.3], fillvalue=-1)))
# [(0, 'A', 0.0), (1, 'B', 1.1), (2, 'C', 2.2), (-1, -1, 3.3)]
from functools import reduce
def add(x, y):
return x + y
print(reduce(add, [1, 2, 3, 4, 5])) # 1+2+3+4+5=15
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
接受4個參數
比較函數經常會用到lambda.
from collections import Counter
c = Counter(list_t)
c.most_common(3)
sorted(c)
sum(c.values())
按照有序插入顺序存储 的有序字典
排序
dd = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
# 按key排序
kd = collections.OrderedDict(sorted(dd.items(), key=lambda t: t[0]))
# 按照value排序
vd = collections.OrderedDict(sorted(dd.items(),key=lambda t:t[1]))
# 输出
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])
from collections import deque
queue = collections.deque()
單個數據入隊
可迭代对象入队: extend(iterable),将一个可迭代对象中的数据按顺序添加到队列的尾部。
指定位置插入数据: insert(index, item),在队列中的指定位置插入一个数据,index为指定的位置索引。
队列两端的出队方法。
deque的copy方法: copy(),拷贝队列。拷贝之后,对原队列进行操作,不会影响到拷贝出来的队列。
deque返回指定值的数量和索引
deque的翻转和轮转
deque的删除
deque指定队列的长度
pickle.dump(obj, file[, protocol])
序列化对象,并将结果数据流写入到文件对象中。
pickle.load(file)
反序列化对象。将文件中的数据解析为一个Python对象。
pickle.clear_memo()
清空pickler的“备忘”。
基本应用就是用来遍历一个集合对象,它在遍历的同时还可以得到当前元素的索引位置。
names = ["Alice","Bob","Carl"]
for index,value in enumerate(names, 1):
print(f'{index}: {value}')
用于创建并返回一个新的字典。两个参数:第一个是字典的键,第二个(可选)是传入键的值,默认为None。
from random import randint
data = [randint(0, 20) for _ in range(30)]
d = dict.fromkeys(data, 0)
print(d)