|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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.
|
评分
-
查看全部评分
|