首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有使用特殊类方法访问多维列表的Pythonic范式?

有没有使用特殊类方法访问多维列表的Pythonic范式?
EN

Stack Overflow用户
提问于 2020-05-19 01:40:53
回答 1查看 44关注 0票数 0

给定一个表示2D列表的自定义dataclass,有没有一种Pythonic式的或者特别优雅的方式来通过特殊的类方法,即__setitem____getitem__来提供不同的修改方法。

例如,第一个维度是街道,第二个维度是房屋。您希望能够抓取整条街道,以及单个房屋。类似地,您希望创建整个街道,以及现有街道上的单个房屋。

我知道你可以混合使用默认参数,或者带有类型/长度检查的元组。或者,您也可以安全地使用它,并具有独立的访问功能。

然而,这似乎也是一个具有经典解决方案的问题。谢谢!

使用类型检查的示例:

代码语言:javascript
复制
class multiDimList(object):
    def __init__(self):
        self._data = [[0, 1, 2], [3, 4, 5], [6, 7, 8]]

    def __getitem__(self, index):
        if isinstance(index, tuple):
            x, y = index
            return self._data[x][y]
        else:
            return self._data[index]

    def __setitem__(self, index, value):
        if isinstance(index, tuple):
            x, y = index
            self._data[x][y] = value
        else:
            self._data[index] = value

myMDL = multiDimList()
print(myMDL[0])
print(myMDL[0, 0])
myMDL[0] = [9, 10, 11]
print(myMDL[0])
myMDL[0, 0] = 12
print(myMDL[0])

输出:

代码语言:javascript
复制
[0, 1, 2]
0
[9, 10, 11]
[12, 10, 11]
EN

回答 1

Stack Overflow用户

发布于 2020-05-19 02:37:46

可以,使用NumPy。如果您将myMDL创建为一个NumPy array,它将完全按照您的要求工作。

代码语言:javascript
复制
import numpy as np

myMDL = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])

print(myMDL[0])
print(myMDL[0, 0])
myMDL[0] = [9, 10, 11]
print(myMDL[0])
myMDL[0, 0] = 12
print(myMDL[0])

输出:

代码语言:javascript
复制
[0 1 2]
0
[ 9 10 11]
[12 10 11]

请注意,它显示为一个数组-没有逗号,在9之前有前导空格。

NumPy还支持许多其他功能,比如访问其他维度。例如,要访问第二列:

代码语言:javascript
复制
>>> print(myMDL[:,1])
[10  4  7]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61875667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档