1、解压赋值多个变量,运用*号
(1)如:在一列排好顺序的成绩下,去掉一个最低分和一个最高分,对剩下的数,求平均值
def ggg(grede):
frist,*list,end = grede
return list
grede = [23,45,55,78,89,100]
list = ggg(grede)
print("%f\n"%(sum(list)/len(list)))
(2) 星号表达式在迭代元素为可变长元组的序列时是很有用的,如:
records = [
('foo', 1, 2),
('bar', 'hello'),
('foo', 3, 4),
]
def do_foo(x, y):
print('foo', x, y)
def do_bar(s):
print('bar', s)
for tag, *args in records:
if tag == 'foo':
do_foo(*args)
elif tag == 'bar':
do_bar(*args)
2、双端queue
(1)基本用法
下面简单的介绍一下python中双端队列的操作函数;
from collections import deque #首先从collections 模块中导入deque类
下来我们定义一个双端队列
1. A=deque([] , maxlen = ) #创建一个空的双队列
2. A.append(n) #从右边像队列中增加元素 ,n表示增加的元素
3. A.appendleft(n) #从左边像队列中增加元素,n表示增加的元素
4. A.clear() #清空队列
5. A.count(n) #在队列中统计元素的个数,n表示统计的元素
6. A.extend(n) #从右边扩展队列,n表示扩展的队列
7. A.extendleft(n) #从左边扩展队列,n表示扩展的队列
8. A.pop() #从队列的右边删除元素,并且返回删除值
9. A.popleft() #从队列的左边删除元素,并且返回删除值
10. A.remove(n) #从队列中删除指定的值
11. A.reverse() #翻转队列
12. A.rotate(n) #旋转队列,默认时值为1,由右边开始旋转,负值代表左边旋转,n代表从队列的第一个元素开始,n从1开始计数
函数详情:https://blog.csdn.net/qq_40991386/article/details/81150338
双端队列中获取就直接用下表获取就行了。
代码:
from collections import deque
def search(lines, pattern, history=5):
previous_lines = deque(maxlen=history)
for line in lines:
if pattern in line:
yield line, previous_lines
previous_lines.append(line)
# Example use on a file
if __name__ == '__main__':
with open(r'../../cookbook/somefile.txt') as f:
for line, prevlines in search(f, 'python', 5):
for pline in prevlines:
print(pline, end='')
print(line, end='')
print('-' * 20)
理解一下,上面的这段代码,其中 yield 是生成器的意思,如不明白的话请查看 https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/
双端队列使用时,应注意:deque(maxlen=N)
构造函数会新建一个固定大小的队列。当新的元素加入并且这个队列已满的时候, 最老的元素会自动被移除掉。