【发布时间】:2014-03-02 12:38:37
【问题描述】:
我想对列表进行递归读取
例如,我有以下内容:
[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.chain?相当不清楚您的理解应该是什么意思。在这里,一个常规的、更明确的循环可能更具可读性。 -
请注意,
[a for a in [9, 8, 7]]只是[9, 8, 7]的一种写法。 -
@RemcoGerlich 啊哈哈哈哈!!好笑,那是我的错!
-
@RemcoGerlich
[a for a in [9, 8, 7]]不是[9, 8, 7][:]的一种奇特的写法吗?毕竟这是一个新列表。在这种精确的背景下,这并不重要。 -
是的,当然,或者
list([9, 8, 7])。但是使用文字 [9, 8, 7] 当然已经创建了一个新列表。如果他使用随机迭代器而不是文字列表,它可能意味着什么,但这样写只会使表达式更难理解。