1,讲序列分解为单独的变量
p=(4,5) x,y=p print(x,y)
如果在分解中想丢弃某些特定的值,可以采用_来进行
data=[‘A‘,‘B‘,‘c‘,‘d‘] _,name,age,_=data print(_) print(name) print(age)
2.从任意长度的可迭代对象中分解元素
1>假设一门课程,我们需要去掉第一个成绩,和最后一个成绩,只取中间的数据的平均值,那么可以用*来进行处理
line="nobody:*:-2:-2:yyyyyy:/var/empty:/usr/bin/fale" uname,*fields,homedir,sh=line.split(":")
3,保存最后N个元素
如果在处理过程中,对最后几项做一个有限的历史记录。我们可以用collections里面的deque,当我们设置最大长度的,它会自动清除时间比较长的数据
from collections import deque #maxlen最大可以有3个值 k=deque(maxlen=3) k.append(1) k.append(3) k.append(2) print(k) k.append(4) print(k)
4,找打最大或最小的N个元素
我们想在某个几个中找到最大和最小的几个元素,这里主要说明的是heapq模块,里面有2个函数nlargest和nsmallest
import heapq nums=[1,8,2,23,7,-4,18,23,42,37,2] print(heapq.nlargest(3,nums)) #最大的三位数 print(heapq.nsmallest(3,nums)) #最小的三位数
protfollo=[ {‘name‘:‘IBM‘,‘share‘:100,‘price‘:91.1}, {‘name‘:‘uuu‘,‘share‘:112,‘price‘:100}, {‘name‘:‘db‘,‘share‘:333,‘price‘:67}, {‘name‘:‘tt‘,"share":222,"price":454} ] # k=lambda x:x[‘price‘] # print(k({‘name‘:‘IBM‘,‘share‘:100,‘price‘:91.1})) import heapq num=heapq.nsmallest(3,protfollo,key=lambda x:x[‘price‘]) print(num)
5,在字典中将键映射到多个值上,可以用defaultdict
from collections import defaultdict m=defaultdict(list) m[‘a‘].append(1) m[‘a‘].append(5) m[‘b‘].append(2) m[‘5‘].append(3) print(m)
6,与字典有关的计算问题
price={ ‘ACE‘:45.23,‘AApl‘:612,‘SSS‘:205,‘IBM‘:37 } min_price=min(zip(price.values(),price.keys())) print(min_price) man_price=max(zip(price.values(),price.keys())) print(man_price) sort_obj=sorted(zip(price.keys(),price.values())) print(sort_obj)
7,在两个字典中寻找相同点
主要是字典的keys 和 item 也可以做集合的交集并集等运算 a={‘x‘:1,‘y‘:2,‘z‘:3} b={‘w‘:10,‘x‘:11,‘y‘:2} print(a.keys() & b.keys()) #{‘y‘, ‘x‘} print(a.keys() - b.keys()) #{‘z‘} print(a.items() & b.items()) #{(‘y‘, 2)}
8,找出序列中出现次数最多的元素 Counter 函数
9,通过公共键对字典列表排序,,这里面用到啦itemgetter函数
from operator import itemgetter rows=[ {‘fname‘:‘brian‘,‘lname‘:‘jones‘,‘uid‘:1003}, {‘fname‘:‘rrr‘,‘lname‘:‘jjjj‘,‘uid‘:1002}, {‘fname‘:‘bbb‘,‘lname‘:‘kkk‘,‘uid‘:1004}, {‘fname‘:‘nnn‘,‘lname‘:‘llll‘,‘uid‘:1001}, {‘fname‘:‘mmm‘,‘lname‘:‘fff‘,‘uid‘:1005}, ] mink=sorted(rows,key=lambda x:x[‘uid‘]) print(mink) mink=sorted(rows,key=itemgetter(‘uid‘)) print(mink)
10,根据字段将记录分组 itertool.groupby()
rows=[ {‘address‘:‘beijing‘,‘date‘:‘07/01/2012‘}, {‘address‘:‘shanghao‘,‘date‘:‘07/01/2012‘}, {‘address‘:‘hangzhou‘,‘date‘:‘07/02/2012‘}, {‘address‘:‘suzhou‘,‘date‘:‘07/02/2012‘}, {‘address‘:‘nanjing‘,‘date‘:‘07/03/2012‘}, {‘address‘:‘xian‘,‘date‘:‘07/04/2012‘}, ] from itertools import groupby from operator import itemgetter print(itemgetter(‘data‘))
11,将名字映射到序列的元素中 namedtuple方法