Python内联列表递归

Python内联列表递归,python,recursion,Python,Recursion,我想对列表进行递归读取 例如,我有以下几点: [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,

我想对列表进行递归读取

例如,我有以下几点:

[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
负责以下事项:

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
)。

或没有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.chain
?你的理解应该是什么意思还不清楚。一个规则的、更明确的循环在这里可能更具可读性。请注意,
[A代表[9,8,7]]
只是一种编写
[9,8,7]
@RemcoGerlich ahahahahahahahahahahahahahahahahahahahahaha!!好笑,那是我的错@RemcoGerlich不是[9,8,7]中的a的
[a]
一种奇特的写作方式
[9,8,7][:]
?这毕竟是一份新的清单。在这个精确的上下文中,它并不重要。是的,当然,或者
list([9,8,7])
。当然,使用文本[9,8,7]已经创建了一个新列表。如果他使用随机迭代器而不是文字列表,这可能意味着什么,但按原样编写只会使表达式更难理解。这不起作用,引发了一个
TypeError:“int”对象不可iterable
异常,然后打印了一个空数组!它是否会在这一行中抛出该错误
打印(列表(链))
?是的,我刚刚将其复制到控制台。好的。谢谢它工作良好,而且在一行中(正是我所需要的)