在字典中存储类似矩阵的数据

2024-05-20 19:23:37 发布

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

我有一个嵌套在另一个循环中:

position={}
n=2
for i in range(n):
i=str(i)
    for j in range(n):
        j=str(j)
        position[str(i+j)]= #whatever (in my case an object)

这样字典的键值就是来自矩阵的索引,我只需要用position['11']调用它就可以得到它。
有没有更好的方法来连接i和{}?存储(并创建)矩阵式的数据?在

PS:我知道numpy库,但我还没有成功安装它。。。但这是另一个问题。。。在


Tags: 方法inanfor字典objectmyposition
3条回答

“正确”的答案是找出如何安装Numpy,因为这将比编写一个自制的伪矩阵类更能改进您的编程工具集。在

但是,如果你想按自己的方式去做,这会导致问题:

position[str(i+j)]

你将如何区分2,11和{}之间的区别。?在

所以你的dict键应该是

^{pr2}$

或者@user2.3M建议:

position[(i,j)]

但您并不想为每个“矩阵”访问构建复杂的字符串或新元组。
除非地图非常大且稀疏,否则最好使用@JAB答案中基于列表的版本之一。在

你的字典等着出版是件头疼的事。它无法区分第1行第11列和第11行第1列。在

如果您无法让NumPy正常工作,那么解决问题的标准解决方案是一个嵌套列表:

matrix = [[whatever() for i in xrange(n)] for j in xrange(n)]

您可以用matrix[i][j]来索引它。在

您还可以使用带元组索引的dict:

^{pr2}$

并用matrix[i, j]索引它。这可能会让需要维护代码的人大吃一惊。在

如果不想使用numpy,可以使用嵌套列表(相当于C中的多维数组):

position=[]
n=2
for i in range(n):
    position.append([])
    for j in range(n):
        position[i].append(some_object)

然后使用position[i][j]引用它。在

另一种方法是使用一个平面列表,并使用计算的值对其进行索引(基本上,当您在C中索引到二维数组时会发生什么情况,因为这些数组存储为一个连续数组,编译器对您提供的多个索引执行一些数学运算,以便索引到该底层平面数组中):

^{pr2}$

相关问题 更多 >