1. 程式人生 > >python模組之itertools

python模組之itertools

1 chain(*可迭代物件)

chain 迭代器能夠將多個可迭代物件合併成一個更長的可迭代物件。實際上,我參與的一個專案中最近就需要這一功能。我有一個列表,裡面已經包含一些元素,接著想把另外兩個列表新增到最初那個列表中。注意,我們想新增的是兩個列表的元素。最初,我是這樣做的:

>>> my_list = ['foo', 'bar']
>>> numbers = list(range(5))
>>> cmd = ['ls', '/some/dir']
>>> my_list.extend(cmd, numbers)
>>> my_list
['foo', 'bar', ['ls', '/some/dir'], [0, 1, 2, 3, 4]]

這並不是我想要的。itertools 模組提供一個優雅得多的方法用chain 來合併這些列表:

>>> from itertools import chain
>>> my_list = list(chain(['foo', 'bar'], cmd, numbers))
>>> my_list
['foo', 'bar', 'ls', '/some/dir', 0, 1, 2, 3, 4]

許多聰明的讀者可能想到了,實際上不使用 itertools,也有其他方法能夠實現這一要求。你可以這樣做:

>>> my_list = ['foo', 'bar']
>>> my_list += cmd + numbers
>>> my_list
['foo', 'bar', 'ls', '/some/dir', 0, 1, 2, 3, 4]

這些方法當然都是可行的。在我知道 chain 之前,我可能會這樣做,但我個人認為這個例子中, chain 更為優雅,也更容易理解。