1.解压序列赋值给多个变量
p = (4, 5, 6)
x, y , z = p # x = 4, y = 5, z = 6 若可迭代对象超过变量个数,会抛出ValueError
用处:可以解压赋值任何可迭代对象(包括列表,元组,字符串,文件对象,迭代器,生成器)
2.解压可迭代对象赋值多个变量
p = (4, 5, 6)
x, *y = p # x = 4, y = [5, 6] 此方法可防止ValueError,y变量永远是列表类型,*y可以在任意位置
用处:
1.专门用于解压不确定个数或者任意个数元素的可迭代对象(如:第一个元素后都是相同含义的元素)设计的。
2.可用于字符串分割:x, *y, z = 'x:x:x:x:x'.split(':') # 小知识:如果想解压一些元素后抛弃可命名为_ , ign(*_, *ign)
3.保留最后N个元素
使用deque可以在迭代操作时只保留有限的几行元素的历史记录
from collections import deque q = deque(maxlen=5) # 构造函数会新建一个固定大小的队列,新元素加入已满队列时会移除最老元素
q.append(1) # 时间复杂度O(1)
q.appendleft(1) # 时间复杂度O(1)
q.pop() # 时间复杂度O(1)
4.查找最大或最小的N个元素
怎么从一个集合中获取最大或者最小的N个元素列表
import heapq
nums = [1, 2, 4, 8, -1, 0, -3]
heapq.nlargest(3, nums) # [8, 4, 2]
heapq.nsmallest(3, nums) # [-3, -1, 0] portfolio = [
{'name': 'IBM', 'shares': 100, 'price': 91.1},
{'name': 'AAPL', 'shares': 50, 'price': 543.22},
]
cheap = heapq.nsmallest(3, portfolio, key = lambda s: s['price'])
expensive = heapq.nlargest(3, portfolio, key = lambda s: s['price']) # price的值进行比较
作用:将列表变为小顶堆:heapq.heapify(list(nums))