请帮我解决这个问题:我有一个包含数字和列表类型的列表:
list = [1,2,[3,4,5],6,7,[8,9]]
我想要得到的是一个数字列表(父列表中包含合并列表):示例:
new_list = [1,2,3,4,5,6,7,8,9]
使用递归和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]
请记住不要以自己的类型命名列表:)。
我个人使用这种方法:
这是递归展平的功能版本,它同时处理元组和列表,并允许您输入任何位置参数的组合。返回一个生成器,它按顺序生成整个序列,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)