Chapter1 Data Structures and Algorithms
1.1 Unpacking a Sequence into Separate Variables
任何序列都可以通过赋值操作来分解为单独的变量, 但数量要吻合, 否则会报错.
如果有不需要的成员, 可以使用一些特殊变量名, 比如下面的_
>>> data = [ 'ACME', 50, 91.1, (2012, 12, 21) ]
>>> _, shares, price, _ = data
>>> shares
50
>>> price
91.1
1.2 Unpacking Elements from Iterables of Arbitrary Length
对于不确定个数和任意个数的序列, 可以使用星号来获取其中一段数据.
>>> items = [1, 10, 7, 4, 5, 9]
>>> head, *tail = items
>>> head
1
>>> tail
[10, 7, 4, 5, 9]
>>>
1.3 Keeping the Last N Items
collections.deque 双端队列适合用来有限的历史记录.
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 # 如果匹配返回(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 定义生成器函数, 在每次迭代时生成一个值并暂停执行, 可以用来生成一个元组 (line, previous_lines)
1.4 Finding the Largest or Smallest N Items
寻找最大或最小的几个数.
heapq 的 nlargest()和 nsmallest()函数.
还可以指定一个 key 参数, 用于更复杂的数据结构.