写出更Pythonic的代码。

1. 将序列分解为单独的变量,直接将序列赋值给变量即可。但是要注意:

  • 变量的数量要和序列中元素的数量相等。

  • 例子如下:
    <!--more-->

    >>>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]

李英杰同学
1.3k 声望120 粉丝