构建引用自身的列表列表的列表理解可以在一行中完成吗?

问题描述 投票:0回答:1

我有许多列表推导式,可以构建各种列表列表。为了保持简单,请考虑:

foo = []
for i in range(1,3):  # dummy loop for the example
    if len(foo) == 0:
        foo = [[x] for x in (0, 1, -1)]  # can I avoid this step?
    else:
        foo = [f + [x] for f in foo for x in (0, 1, -1)]
print(foo)

产生:

[[0, 0], [0, 1], [0, -1], [1, 0], [1, 1], [1, -1], [-1, 0], [-1, 1], [-1, -1]]

我知道还有其他方法使用 itertools 来产生这个特定的输出;我这里简化一下。关键是理解必须建立在自身之上,因此

for f in foo

我的具体问题是:有没有办法避免

if, else
代码并只在一行中执行此操作? 如果我只做
foo = [f + [x] for f in foo for x in (0, 1, -1)]
而没有
len(foo) == 0
的情况,我会得到一个空的
foo

python
1个回答
0
投票

您不需要参考正在构建的列表;只需使用两台发电机即可。

>>> [[x, y] for x in (-1, 0, 1) for y in (-1, 0, 1)]
[[-1, -1], [-1, 0], [-1, 1], [0, -1], [0, 0], [0, 1], [1, -1], [1, 0], [1, 1]]
© www.soinside.com 2019 - 2024. All rights reserved.