- 任何可迭代对象都可以通过一个赋值语句赋值给多个变量
ps:a,b,c,d,e = [1,2,3,4,5]
- 加*可匹配多个对象
比如data = [1,2,3,7,7,7,77,7,],我只想把前三个值赋值给a,b,c
a,b,c,*_ = data
执行结果均为1,2,3
3、保留最后N个元素
from collections import deque
data = [1,2,3,7,7,7,77,7]
dat = deque(maxlen=5)
for da in data:
dat.append(da)
4、查找最大和最小的N个值
import heapq
num = [1,4,2,523,2,3,4,56,2,213421,23,33,432,346,3,34,2,12]
print(heapq.nlargest(3,num)) #最小的三个值
print(heapq.nsmallest(3,num)) #最大的三个值
调用时候会先对集合进行堆排
堆数据结构最重要的特征是 heap[0] 永远是最小的元素。并且剩余的元素可以很容易的通过调用 heapq.heappop() 方法得到, 该方法会先将第一个元素弹出来,然后用下一个最小的元素来取代被弹出元素(这种操作时间复杂度仅仅是 O(log N),N 是堆大小)。 比如,如果想要查找最小的 3 个元素
当要查找的元素个数相对比较小的时候,函数 nlargest() 和 nsmallest() 是很合适的。 如果你仅仅想查找唯一的最小或最大(N=1)的元素的话,那么使用 min() 和 max() 函数会更快些。 类似的,如果 N 的大小和集合大小接近的时候,通常先排序这个集合然后再使用切片操作会更快点 ( sorted(items)[:N] 或者是 sorted(items)[-N:] )。 需要在正确场合使用函数 nlargest() 和 nsmallest() 才能发挥它们的优势 (如果 N 快接近集合大小了,那么使用排序操作会更好些)
portfolio = [
{'name': 'IBM', 'shares': 100, 'price': 91.1},
{'name': 'AAPL', 'shares': 50, 'price': 543.22},
{'name': 'FB', 'shares': 200, 'price': 21.09},
{'name': 'HPQ', 'shares': 35, 'price': 31.75},
{'name': 'YHOO', 'shares': 45, 'price': 16.35},
{'name': 'ACME', 'shares': 75, 'price': 115.65}
]
cheap = heapq.nsmallest(3, portfolio, key=lambda s: s['price'])
expensive = heapq.nlargest(3, portfolio, key=lambda s: s['price'])
可以用函数对更复杂的数据结构进行处理
5、实现一个优先级队列
import heapq
class proqueue:
def __init__(self):
self._queue = []
self._index = 0
def push(self,data,priority):
heapq.heappush(self._queue,(-priority, self._index, data))
self._index += 1
def pop(self):
return heapq.heappop(self._queue)[-1]
6、定义字典,键映射多个值
from collections import defaultdict
d = defaultdict(list)
a = defaultdict(str)
a["cd"] = "12"
d["b"].append(dict(a))
d["b"].append(dict(a))
print(dict(d))
打印结果是: {'b': [{'cd': '12'}, {'cd': '12'}]}
7、字典排序
按照存入顺序存放数据
from collections import OrderedDict
d = OrderedDict()
d['foo'] = 5
d['bar'] = 2
d['spam'] = 3
d['grok'] = 4
print(dict(d))