簡體   English   中英

在python中合並列表列表

[英]Combining lists of lists in python

我想合並列表列表,這是下面的示例

mylist = [[['a', 'b'], ['c', 'd']],
          [['e', 'f'], ['g', 'h']]]

輸出應為:

output = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']

我也嘗試使用itertools ,但這是它返回的內容

>>> combined = list(itertools.chain.from_iterable(mylist))
>>> combined
>>> [['a', 'b'], ['c', 'd'], ['e', 'f'], ['g', 'h']]

我如何實現這一目標['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']

誰能強調我所缺少的東西?

itertools方法不起作用的原因是因為您擁有的不是列表列表,而是列表列表。 itertools工作正常,只需將列表弄平一次。 使用部分展平的列表作為參數再次調用完全相同的函數將起作用:

flat = list(itertools.chain.from_iterable(itertools.chain.from_iterable(mylist)))

或者,一個簡單的列表理解解決方案:

flat = [item for slist in mylist for sslist in slist for item in sslist]

這基本上轉化為:

for slist in mylist:
    for sslist in slist:
        for item in sslist:
            flat.append(item)

請記住,這兩種解決方案僅適用於處理雙重嵌套。 如果有可能您將不得不處理更多的嵌套,建議您查找如何展平任意嵌套列表。

正如其他人所指出的,您這里有兩個級別,因此需要兩個調用chain 但是您實際上並不需要from_iterable調用; 您可以改用*語法:

list(itertools.chain(*itertools.chain(*mylist)))

使用numpy.ndarray.flatten()

import numpy as np

mylist = [ [['a', 'b'], ['c', 'd']], [['e', 'f'], ['g', 'h']] ]    
a = np.array(mylist).flatten().tolist()

print(a)

輸出:

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM