我知道之前有人问过这个问题,但是当有该类型的列表时,我没有看到任何解决方案:
original_list = [[1,2], [3], [4,5,[6
]]]尝试了这种方法:
def flatten(list):
"""Given a list that contains elements and other lists, this
will return a new list that has no sublists ("flattened")"""
flat = [] # new empty list to populate with flattened list
for sublist in list: # iterate through list elements
for element in sublist: #
flat.append(element)
return flat
print(flatten([1,2,3]))
这个方法也是:
old_list = [[1,2], [3], [4,5,[6]]]
flat1 = []
flat1 = [sum(old_list, [])] # 1 layer deep
flat2 = []
flat2 = [sum(flat1), []] # 2 layers deep
print(sort2)
没有任何运气...技巧?谢谢!
类似的东西?
In [6]: original_list = [[1,2], [3], [4,5,[6]]]
In [7]: def flatten(potential_list):
...: new_list = []
...: for e in potential_list:
...: if isinstance(e, list):
...: new_list.extend(flatten(e))
...: else:
...: new_list.append(e)
...: return new_list
...:
In [8]: flatten(original_list)
Out[8]: [1, 2, 3, 4, 5, 6]
如果您有嵌套嵌套的列表,最好的扁平化方法是使用生成器函数
original_list = [[1,2], [3], [4,5,[6]]]
def flatten(l):
for i in l:
if isinstance(i,list):
yield from flatten(i)
else:
yield i
list(flatten(original_list))
#[1, 2, 3, 4, 5, 6]
您可以使用Collections.Iterable
:
In [2810]: def flatten(x):
...: if isinstance(x, collections.Iterable):
...: return [a for i in x for a in flatten(i)]
...: else:
...: return [x]
...:
In [2811]: flatten(original_list)
Out[2811]: [1, 2, 3, 4, 5, 6]
或者像这样的蛮力:
In [2803]: flat_list = []
...: for sublist in original_list:
...: for item in sublist:
...: if isinstance(item,list):
...: for sub_item in item:
...: flat_list.append(sub_item)
...: else:
...: flat_list.append(item)
In [2804]: flat_list
Out[2804]: [1, 2, 3, 4, 5, 6]
这是一个递归解决方案:
def recursive_flatten(lst, retlist = []):
for item in lst:
if type(item) is int:
retlist.append(item)
else:
recursive_flatten(item, retlist)
return(retlist)