[英]Python Inline list recursively
我想对列表进行递归读取
例如,我有以下内容:
[x if x % 2 == 0 else [a for a in [9,8,7]] for x in [2,3,4,5]]
输出是:
[2, [9, 8, 7], 4, [9, 8, 7]]
但我希望它是:
[2, 9, 8, 7, 4, 9, 8, 7]
可能吗?
我试过了
[x if x % 2 == 0 else a for a in [9,8,7] for x in [2,3,4,5]]
并没有工作[2, 9, 4, 9, 2, 8, 4, 8, 2, 7, 4, 7]
提前致谢。
或者没有itertools:
a = [[x] if x % 2 == 0 else [a for a in [9,8,7]] for x in [2,3,4,5]]
a = [i for x in a for i in x]
print (a)
itertools
负责这个:
from collections import Iterable
from itertools import chain
t = [x if x % 2 == 0 else [a for a in [9,8,7]] for x in [2,3,4,5]]
final_list = list(chain.from_iterable(item if isinstance(item,Iterable) and
not isinstance(item, basestring) else [item] for item in t))
print(final_list)
来源: 通过列表理解来压缩列表列表
编辑:以前的解决方案的问题是它只适用于数值相同的数组(例如[[1,2], [3,4]]
),其中数组如[5, [1,2], [3,4]]
返回一些链对象,因为不同级别的值(即5
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.