使用列表理解删除嵌套列表的列

Delete columns of a nested list with list comprehension

如何将这个 for 循环写成列表理解?

这是列表:

table = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]

我想删除第 4 行和第 5 行

for row in table:
    del row[3:]

我确实试过了,但它只是给我一个语法错误

table2 = [del row[5:] for row in table]

知道如何通过列表理解来做到这一点吗?

您可以将列表切片到索引 3:

>>> table = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]
>>> table2 = [i[:3] for i in table]
>>> table2
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]

如果那是你想要的。

for 循环已经是删除行的正确方法。您可以直接调用列表的 __delitem__ 方法,但您只是在使用对其副作用的理解,这被认为是“unpythonic”。它通过使用 slice 对象完成:

table2 = [row.__delitem__(slice(3)) for row in table]

table2 最终变得很无聊

[None, None, None]

这就是我们不以这种方式使用列表解析的原因之一。除了不明显之外,我们还创建了无用的对象。但如果它对你有好处,那就去吧。