[英]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.