例如,這個片段:如何使用.extend列表方法使用列表理解?
out = []
for foo in foo_list:
out.extend(get_bar_list(foo)) # get_bar_list return list with some data
return out
如何縮短使用列表理解這個代碼?
例如,這個片段:如何使用.extend列表方法使用列表理解?
out = []
for foo in foo_list:
out.extend(get_bar_list(foo)) # get_bar_list return list with some data
return out
如何縮短使用列表理解這個代碼?
您可以用生成器表達式和消耗它itertools.chain
:
from itertools import chain
out = list(chain.from_iterable(get_bar_list(foo) for foo in foo_list))
如果列表的長度是小的,則可以做到這一點與求和生成器表達式替代:
sum((get_bar_list(foo) for foo in foo_list), [])
甲nested list comprehension是更有效的,但更少的可讀性。
您可以使用嵌套列表理解:
out = [foo for sub_item in foo_list for foo in get_bar_list(sub_item)]
FWIW,我一直有一個很難記住到底是什麼順序的東西來嵌套列表解析,所以我通常更喜歡使用itertools.chain
(正如摩西的答案中所提到的)。但是,如果你真的愛嵌套列表內涵,順序是一樣的,你會遇到他們在一個正常的循環(最裏面的循環變量可用於第一個表達式列表中的理解):
for sub_item in foo_list:
for foo in get_bar_list(sub_item):
out.append(foo)
相關,如果不重複:http://stackoverflow.com/q/952914/1639625 –
@parsenz不,因爲這將創建列表的列表,而OP正在尋找一個平坦的列表。 – Delgan