在Python中扁平化混合列表(包含可迭代和不可迭代)
可能重复的问题:
在Python中将不规则的列表扁平化
我想知道如何在Python中处理一个包含可迭代对象和不可迭代对象的列表,比如说 [1, [2, 3, 4], 5, [6]]。我希望得到的结果是 [1, 2, 3, 4, 5, 6],而且列表中不会出现列表的列表(等等)。
我尝试过使用 itertools.chain 等方法,但它们似乎只适用于列表的列表。谁能帮帮我!
1 个回答
3
所以你想要只展开1到2层,而不是一直展开到更深的层次;而且只是在列表里面,不包括其他可迭代的东西,比如字符串、元组、数组……我理解你的要求对吧?好的,如果是这样的话……:
def flat2gen(alist):
for item in alist:
if isinstance(item, list):
for subitem in item: yield subitem
else:
yield item
如果你想要一个列表的结果,使用 list(flat2gen(mylist))
就可以得到。
希望这对你来说很简单,如果你的实际需求稍微有点不同,也希望你能轻松调整!