在python中扁平混合列表(包含iterables和noniterables)

Flattening mixed lists in Python (containing iterables and noniterables)

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Flatten (an irregular) list of lists in Python

我该如何在python中展开包含iterables和noniterables的列表,如[1,[2,3,4],5,[6]?结果应该是[1,2,3,4,5,6],并且列表列表列表(等)肯定永远不会出现。

我试过使用itertools.chain等,但它们似乎只在列表上工作。救命!


因此,您只希望将1或2个级别展平,而不是递归地展平到进一步的深度;并且只希望在列表中,而不希望在字符串、元组、数组等其他iterable中…我把你的规格弄对了吗?好的,如果是这样,那么……:

1
2
3
4
5
6
def flat2gen(alist):
  for item in alist:
    if isinstance(item, list):
      for subitem in item: yield subitem
    else:
      yield item

如果您想要一个列表结果,list(flat2gen(mylist))将生成它。

如果你的实际规格有微小的不同,希望这对你来说是非常容易适应的!