三个基本的写法:
- 列表生成式
- 字典生成式
- 迭代器生成式
# 最大或者最小的n个元素
import random
from heapq import nsmallest,nlargest
tt = [random.randint(1,10000) for i in range(1000)]
# 取出的元素较少
%time nsmallest(7,tt)
%time nlargest(7,tt)
# 取出的元素很多
%time sorted(tt)[:7]
%time sorted(tt)[-7:]
# 只取出最大的或者最小的
%time min(tt)
%time max(tt)
import heapq
class PriorityQueue:
def __init__(self):
self._queue = []
def push(self,item,priority):
heapq.heappush(self._queue,(priority,item))
def pop(self):
r = heapq.heappop(self._queue)
return r
pp = PriorityQueue()
pp.push('a',3)
pp.push('b',9)
pp.push('c',6)
pp.push('d',3)
for i in range(4):
print(pp.pop())
from collections import defaultdict
d = defaultdict(list)
d['a'].append(1)
d['a'].append(2)
d['b'].append(4)
# dd = defaultdict(tuple)
# 字典排序
shares = {
'ACME': 45.23,
'AAPL': 612.78,
'IBM': 205.55,
'HPQ': 37.20,
'FB': 10.75
}
rev_shares = list(zip(shares.values(),shares.keys()))
print(min(rev_shares))
print(max(rev_shares))
print(sorted(rev_shares))
# 字典列表的排序
from operator import itemgetter
aa = [
{'name':'bob','score':10},
{'name':'ming','score':12},
{'name':'mike','score':1}
]
sorted(aa,key=itemgetter('score'))
# 字典的共同点 和 不同点
a = {'x': 1, 'y': 2, 'z': 3}
b = {'w': 10, 'x': 11, 'y': 2}
print(a.keys() & b.keys())
print(a.keys() - b.keys())
# 保留最后几个元素
from collections import deque
def lastN(ll):
dq = deque(maxlen=3)
for i in ll:
# yield i
dq.append(i)
return dq
aa = [1,2,67,4,3,6,87,4]
lastN(aa)
# 统计出现频率
import random
from collections import Counter
aa = [random.randint(1,10) for x in range(30)]
res = Counter(aa)
print(res)
print(res.most_common(3))
# 命名元组
from collections import namedtuple
sub = namedtuple('sub',['name','score'])
s = sub('bob','87')
print(s.name)
print(s.score)
from collections import ChainMap
a = {'x': 1, 'z': 3 }
b = {'y': 2, 'z': 4 }
c = {'d': 5, 'z': 9 }
md = ChainMap(a,b,c)
print(md.get('x'))
print(md.get('z'))
print(md.get('yzz'))
# 解压赋值
record = ('Dave', '[email protected]', '773-555-1212', '847-555-1212')
name,_,*phone = record
print(name)
print(phone)
# 去重并且保持顺序
def dedupe(ll):
seen = set()
for item in ll:
if item not in seen:
yield item
seen.add(item)
return seen
a = [1,2,56,7,4,8,32,8,4,76,8,43,3]
print(list(dedupe(a)))
# 切片命名
a = '----80-34--------8000---'
b = '----60-22--------7867---'
iid = slice(4,6)
age = slice(7,9)
salary = slice(17,21)
print(a[iid])
print(b[salary])
# 分组
from operator import itemgetter
from itertools import groupby
rows = [
{'address': '5412 N CLARK', 'date': '07/01/2012'},
{'address': '5148 N CLARK', 'date': '07/04/2012'},
{'address': '5800 E 58TH', 'date': '07/02/2012'},
{'address': '2122 N CLARK', 'date': '07/03/2012'},
{'address': '5645 N RAVENSWOOD', 'date': '07/02/2012'},
{'address': '1060 W ADDISON', 'date': '07/02/2012'},
{'address': '4801 N BROADWAY', 'date': '07/01/2012'},
{'address': '1039 W GRANVILLE', 'date': '07/04/2012'},
]
rows.sort(key=itemgetter('date'))
for date,items in groupby(rows,itemgetter('date')):
print(date)
for i in items:
print(i)