首页 > 解决方案 > 如何一次将两个项目添加到列表中

问题描述

我有一个像这样的简单 for 循环:

for i in range(3):
    if i == 1:
        for x in [0, 2]:
            free_spots.append([x, i])
    else:
        free_spots.append([1, i])

输出这个列表 [[1, 0], [0, 1], [2, 1], [1, 2]]

我计划像这样将其转换为列表理解,但遇到了一个问题:

[[x, i] for x in [0, 2] if i == 1 else [1, i] for i in range(3)]

这会导致错误,我尝试像这样修复它:

[[[x, i] for x in [0, 2]] if i == 1 else [1, i] for i in range(3)]

虽然现在运行它也创建了这个: [[1, 0], [[0, 1], [2, 1]], [1, 2]] 我不希望项目 2 和 3 一起出现在一个列表中。有可能做这样的事情吗?: [[0,i],[2,i] if i == 1 else [1, i] for i in range(3)]

标签: pythonlist-comprehension

解决方案


如果你真的想在一行中做到这一点,这个怎么样?

free_spots = [val for sublist in [([[x, i] for x in [0,2]] if i == 1 else [[1, i]]) for i in range(3)] for val in sublist]
# This effectively creates a list of lists containing the values you want
main_list = [([[x, i] for x in [0,2]] if i == 1 else [[1, i]]) for i in range(3)]
# And then flattens it
free_spots = [val for sublist in main_list for val in sublist]

但其他人是对的。除非您有充分的理由,否则这不是一个好主意。现在我几乎无法理解我自己的代码,因为我已经编写了不是 python zen 的代码。


推荐阅读