写出更Pythonic的代码。
1. 将序列分解为单独的变量,直接将序列赋值给变量即可。但是要注意:
变量的数量要和序列中元素的数量相等。
-
例子如下:
>>>x, y = (4,5) >>>x 4 >>>y 5 >>>a,_,(c,d) = [1,2,(3,4)] >>>a 1 >>>_ 2 >>>c 3 >>>d 4
不只是元组与列表可以,任何可迭代对象都可以,包括字符串,文件,迭代器,生成器等。
可以用 _ 作为变量名,表示要丢弃的值。
2. 当序列特别长时,而我们又只需某一部分的话可以用 *arg来表示。
比如要取到序列中除去第一项和最后一项的值,求平均值。
def drop_first_last(grades):
first, *middle, last = grades
return avg(middle)
*arg 也可以放到第一个位置,事实上可以放到任何位置,表示剩余的所有值。
3.从队列两端添加或弹出元素的复杂度为O(1),这和列表不同,当从列表头部插入或移除元素时,列表的复杂度为O(N).
>>>from collections import deque
>>>q = deque(1)
>>>q = deque(2)
>>>q = deque(3)
>>>q
deque([1,2,3])
>>>q.appendleft(4)
>>>q
deque([4,1,2,3])
>>>q.insert(0,8)#这种插入方法需要首先将列表中的所有元素向后移一个单位
4.找到最大或最小的N个元素
heapq 模块中有两个函数 nlargest()和nsmallest()
import heapq
nums = [1, 2, 5, 34, -5, 42, -9]
print(heapq.nlargest(3,nums))# Prints [42,34,5]
print(heapq.nsmallest(3,nums))#Prints [-9,-5,1]