使用列表理解删除嵌套列表的列
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]
这就是我们不以这种方式使用列表解析的原因之一。除了不明显之外,我们还创建了无用的对象。但如果它对你有好处,那就去吧。
如何将这个 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]
这就是我们不以这种方式使用列表解析的原因之一。除了不明显之外,我们还创建了无用的对象。但如果它对你有好处,那就去吧。