|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 lh625243422 于 2017-6-11 14:05 编辑
1.将包含N个元素的可迭代对象解压后同时赋值给N个变量。
例如: p=[4,5]
x,y=p
list=['abc',1,10,(1,2,3)]
str1,num1,num2,tuple1=list
注:可迭代对象可以是列表、元组、字符串、文件对象、迭代器、生成器等。
变量的个数要与序列中的元素相匹配
例如:data=['小明','175','65',(1995,10,15)]
name,height,weight,(year,mon,day)=data
与上例中的list的解压不同的是,我们可以把列表中的元组元素进一步解压成3个变量(要用括号把3个变量括起来)。
例如:解压一个列表中的单个字符串元素要加上一个逗号没有逗号将报错Traceback (most recent call last):
File "<pyshell#34>", line 1, in <module>
[x,y]=data
ValueError: not enough values to unpack (expected 2, got 1)
(x,y),=data
解压字符串如下结果为a='1',b=2',c='3'。
2.当只解压一部分,丢弃其他部分的时候,可以用任意变量去占位,然后在丢掉不用的变量。如下例中的"_"作为占位变量。data=['xiaoming',175,130,(1999,4,5)]
name,_,weight,_=data
结果为name=‘xiaoming’,weight=130,_的值为最后的赋值(1999,4,5)。
3.当我们需要将几个元素解压给同一个变量的时候,可以用*变量名,这样变量既可以接收多个元素。data=[1,a,b,c,'nihao']
n,*alp,st=data
这里alp的值将是个序列,结果n=1,alp=['1', '2', '3'],st=‘nihao’。students=[('a',100,99),('b',70,80),('c',60,88)]
def grade(x,y):
print(x,y)
for name,*xy in students:
if name=='b':
grade(*xy)
elif name=='a':
grade(*xy)
else:
grade(*xy)
*解压也可像上面的例子用于解压带标签元组里的元素。结果为
100 99
70 80
60 88
4.当我们在搜索某些关键字并且返回其前N行的时候可用双端队列“deque”来实现from collections import deque
def search(lines,pattern,history):
previous_lines=deque(maxlen=history)
for li in lines:
if pattern in li:
yield li ,previous_lines
previous_lines.append(li)
if __name__=='__main__' :
with open(r"C:\Users\Administrator\Desktop\游戏资料.txt") as f:
for line ,prevlines in search(f,"62524",5):
for pline in prevlines:
print(pline,end="\n ")
print(line,end='\n ')
print("-"*20)
代码中“yeild“,每次循环返回的迭代的生成器,可以用循环来生成值,
deque的maxlen指的是其序列包含的元素个数不能超过其值,当超过时就会弹出最老的元素
5.从一个集合里返回N个最大或最小的元素import heapq
nums=[1,8,2,23,7,-4,23,42,37,]
print(heapq.nlargest(3,nums))
print(heapq.nsmallest(3,nums))
结果:[42, 37, 23]
[-4, 1, 2]
nlargest/nsmallest(n,list),表示返回n个最大值或最小值
这两个函数中都可以使用key关键字来排序import heapq
students=[
{'name':'xiaoming','language':98,'math':88},
{'name':'xiaohong','language':78,'math':76},
{'name':'xiaozhang','language':90,'math':78},
{'name':'xiaosong','language':85,'math':80},
{'name':'xiaowang','language':87,'math':100},
]
student_math=heapq.nlargest (4,students,key=lambda s:s['math'])
print(student_math)
结果:
[{'name': 'xiaowang', 'language': 87, 'math': 100},
{'name': 'xiaoming', 'language': 98, 'math': 88},
{'name': 'xiaosong', 'language': 85, 'math': 80},
{'name': 'xiaozhang', 'language': 90, 'math': 78}]import heapq
nums=[1,8,2,23,7,-4,23,42,37,]
heapq.heapify(nums)#将nums转化成堆
print(heapq.heappop(nums))#弹出堆中的最小值
print(heapq.heappop(nums)#弹出堆中的最小值
结果为-4,1.
|
评分
-
查看全部评分
|