在Python中扁平化混合列表(包含可迭代和不可迭代)

0 投票
1 回答
3333 浏览
提问于 2025-04-16 00:47

可能重复的问题:
在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)) 就可以得到。

希望这对你来说很简单,如果你的实际需求稍微有点不同,也希望你能轻松调整!

撰写回答