纯 Python 中的 2d 数组列切片,无需 for 循环

2d Array column slicing in Pure Python without for loops

提问人:Actuarysmacktuary 提问时间:10/4/2021 更新时间:10/6/2021 访问量:271

问:

是否可以在没有 for 循环或列表推导的情况下在纯 Python 中从 2d 数组中切出一列?例如,假设你有一个 4x4 的整数数组:

grid = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]

假设您想返回没有第一行和最后一列的网格:是否有切片语法可以让您执行此操作?排除第一行很容易实现,但是做一些类似的事情似乎应该有效,但会导致 .如果可能的话,我想避免在循环/列表理解中遍历它。我知道这会起作用,但我想知道是否有更优雅的语法。[[5,6,7],[9,10,11],[13,14,15]]grid = grid[1:4]grid = grid[1:4][0:2][[5, 6, 7, 8], [9, 10, 11, 12]]

python 列表 多维数组 切片

评论

0赞 Actuarysmacktuary 10/4/2021
是的,我知道如果确实有效,我在技术上需要 grid[1:4][0:3]。我只是使用 [0:2] 来表明这仍然是对嵌套列表的第一层进行切片,而不是我想要的第二层。
0赞 ddejohn 10/4/2021
在没有迭代的情况下,没有办法在纯 Python 中做到这一点。
0赞 ddejohn 10/4/2021
好奇你认为什么比任何都更优雅......[row[:-1] for row in x[1:]]

答:

0赞 Actuarysmacktuary 10/6/2021 #1

就 ddejohn 的观点而言,这不能仅通过切片符号来完成。这不使用切片表示法,但如果 matrix 是输入列表,则不使用 list comps 或 for 循环的一个很好的答案是 list(zip(*matrix))。