是否可以使用带有切片符号的operator.itemgetter?

问题描述 投票:0回答:1

我在python列表lst中有一堆numpy数组。我可以对这些数组之一进行切片,以通过使用[:, 1]对其进行索引来获取特定视图。

我需要将此切片操作应用于lst中的所有numpy数组。使用生成器理解,我可以做到:

(my_array[:, 1] for my_array in lst)

我想知道是否有一种方法可以用operator.itemgettermap完成相同的事情。

map(operator.itemgetter(:, 1), lst)毫无疑问会导致语法错误。

python numpy slice
1个回答
0
投票

切片语法为您生成slice对象。您必须显式创建它们才能传递给itemgetter。由于itemgetter(x,y)(a)等效于(a[x], a[y]),因此还需要使用括号来确保传递由tupleslice索引组成的单个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)的缩写。)

© www.soinside.com 2019 - 2024. All rights reserved.