0

请帮我解决这个问题:我有一个包含数字和列表类型的列表:

list = [1,2,[3,4,5],6,7,[8,9]]

我想要得到的是一个数字列表(父列表中包含合并列表):示例:

new_list = [1,2,3,4,5,6,7,8,9]
4

2 回答 2

3

使用递归和collections.Iterable

>>> from collections import Iterable
>>> def flat(lst):
...     for parent in lst:
...         if not isinstance(parent, Iterable):
...             yield parent
...         else:
...             for child in flat(parent):
...                 yield child
...
>>> list(flat(t))
[1, 2, 3, 4, 5, 6, 7, 8, 9]

请记住不要以自己的类型命名列表:)。

于 2013-07-05T07:53:38.537 回答
2

我个人使用这种方法:

这是递归展平的功能版本,它同时处理元组和列表,并允许您输入任何位置参数的组合。返回一个生成器,它按顺序生成整个序列,arg by arg:

flatten = lambda *n: (e for a in n
    for e in (flatten(*a) if isinstance(a, (tuple, list)) else (a,)))

用法:

l1 = ['a', ['b', ('c', 'd')]]
l2 = [0, 1, (2, 3), [[4, 5, (6, 7, (8,), [9]), 10]], (11,)]
print list(flatten(l1, -2, -1, l2))
['a', 'b', 'c', 'd', -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

这适用于 python 3.x 和 python 2.x

这是相同的正则表达式解决方案..

 import re

 def Flatten(TheList):
   a = str(TheList)
   b,crap = re.subn(r'[\[,\]]', ' ', a)
   c = b.split()
   d = [int(x) for x in c]

   return(d)
于 2013-07-05T07:56:56.783 回答