Python:使用经过修改的语法从ndimensional lis访问元素

2024-09-28 01:23:09 发布

您现在位置:Python中文网/ 问答频道 /正文

在询问this question之后,我扩展了已接受的答案,使其适用于二维列表:

class List(list):
    def __call__(self, i):
        def call(j):
            return self[i][j]
        return call

三维列表:

class List(list):
    def __call__(self, i):
        def call2(j):
            def call3(k):
                return self[i][j][k]
            return call3
        return call2

但是对于n维列表,这个类是如何实现的呢?你知道吗


Tags: 答案self列表returndefcallthislist
1条回答
网友
1楼 · 发布于 2024-09-28 01:23:09

如果索引值本身是^{} type,则可以返回“callable list”类型:

from collections import Sequence

class List(list):
    def __call__(self, i):
        res = self[i]
        if isinstance(res, Sequence) and not isinstance(res, str):
            res = type(self)(res)
        return res

这确保了可以[..]索引语法处理的任何内容现在也可以用(..)调用语法处理。你知道吗

我排除了字符串;这些也是序列,但您可能不想将其扩展到那些值。你知道吗

演示:

>>> from collections import Sequence
>>> class List(list):
...     def __call__(self, i):
...         res = self[i]
...         if isinstance(res, Sequence) and not isinstance(res, str):
...             res = type(self)(res)
...         return res
... 
>>> a = List([[['foo']]])
>>> a(0)
[['foo']]
>>> a(0)(0)(0)
'foo'

相关问题 更多 >

    热门问题