我在python列表lst
中有一堆numpy数组。我可以对这些数组之一进行切片,以通过使用[:, 1]
对其进行索引来获取特定视图。
我需要将此切片操作应用于lst
中的所有numpy数组。使用生成器理解,我可以做到:
(my_array[:, 1] for my_array in lst)
我想知道是否有一种方法可以用operator.itemgetter
和map
完成相同的事情。
map(operator.itemgetter(:, 1), lst)
毫无疑问会导致语法错误。
切片语法为您生成slice
对象。您必须显式创建它们才能传递给itemgetter
。由于itemgetter(x,y)(a)
等效于(a[x], a[y])
,因此还需要使用括号来确保传递由tuple
和slice
索引组成的单个int
。
# [:] -> slice(None)
map(operator.itemgetter((slice(None), 1)), lst)
确定确切切片语法的作用的有用工具是定义一个小类
class A:
def __getitem__(self, key):
print(key)
然后您可以进行快速检查,例如
>>> A()[:,1]
(slice(None, None, None), 1)
([slice(None)
是slice(None, None, None)
的缩写。)