原始Python中的多维切片

时间:2014-02-25 22:43:30

标签: python multidimensional-array

假设我有一个定义为

的数组
[
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
]

我希望得到一个垂直切片,返回[2, 5, 8]。有没有办法在直接Python中切片语法?当我尝试查找多维切片时,我倾向于看到的唯一结果都是讨论numpy,并且使用所讨论的语法会在原始Python中产生错误。

2 个答案:

答案 0 :(得分:2)

我不知道获得垂直切片的直接方法,这可能比列表理解答案更昂贵,但仍然

z = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
]
list(zip(*z)[1])
[2, 5, 8]

或者这可能稍贵一点

from itertools import izip, islice
list(*islice(izip(*z), 1, 2))
[2, 5, 8]

答案 1 :(得分:1)

不确定。你通常可以使用for循环。或者只是你可以编码:

>>> test = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
]
>>> [row[1] for row in test]
[2, 5, 8]

这段代码将生成垂直切片的新列表。如果您确实需要切片操作,则以下代码将非常有用:

>>> [item for sublist in test for item in sublist][1::len(test[0])]
[2, 5, 8]