簡體   English   中英

如何從嵌套列表制作平面列表?

[英]How to make a flat list from nested lists?

給定一個嵌套的整數列表,實現一個迭代器來展平它。 每個元素要么是一個整數,要么是一個列表——其元素也可以是整數或其他列表。 例如,如果輸入是[[1,1],2,[1,1]] ,那么輸出是[1, 1, 2, 1, 1] 如果輸入是[1,[4,[6]]] ,那么輸出是[1, 4, 6]

誰能告訴我下面的代碼哪里出錯了? 我剛開始使用python。

def eb34(list1):
   
    flat_list = []
    
    for i in range(len(list1)):
        if type(list[i]) == list:
            flat_list += flatten(list1[i])
        else:
            flat_list.append(list1[i])
        
    return flat_list

您可以使用遞歸:

def flatten(arg):
    if not isinstance(arg, list): # if not list
        return [arg]
    return [x for sub in arg for x in flatten(sub)] # recurse and collect

print(flatten([[1,1],2,[1,1]])) # [1, 1, 2, 1, 1]
print(flatten([1,[4,[6]]]))     # [1, 4, 6]

或者做一個發電機,

def flatten(arg):
    if not isinstance(arg, list): # if not list
        yield arg
    else:
        for sub in arg:
            yield from flatten(sub)

print(*flatten([[1,1],2,[1,1]])) # 1 1 2 1 1
print(*flatten([1,[4,[6]]]))     # 1 4 6

我不知道您在代碼中從哪里調用 flatten() 。 我正在為您提供您提供的其他信息的解決方案。 如果這不起作用,請幫助我了解您的情況。

def eb34(list1):
    flat_list = []
    for i in list1:
        if isinstance(i, list):
            for j in eb34(i):
                flat_list.append(j)
        else:
            flat_list.append(i)
    return flat_list

您可以遞歸地展平它:

def flatten_recursively(lst_in):
    lst_out = []
    for i in lst_in:
        if type(i) == list:
            for j in flatten_recursively(i):
                lst_out.append(j)
        else:
            lst_out.append(i)
    return lst_out

另請查看此答案,盡管您可能必須將其調整為 Python 3+: https ://stackoverflow.com/a/10824420/18189622

從嵌套列表創建平面列表的最簡單方法是使用 itertools 模塊。 itertools 模塊有一個名為 chain 的函數,它接受一個列表並返回一個列表。

 >>> import itertools
 >>> nested_lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
 >>> flat_list = list(itertools.chain(*nested_lists))
 >>> flat_list
 [1, 2, 3, 4, 5, 6, 7, 8, 9]

暫無
暫無

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

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