如何在数学上更改字典中的值对?

时间:2018-04-04 02:11:20

标签: python python-3.x

我将2D坐标对存储为字典中的值。它似乎将它们视为整数(当我打印它们时没有引号)。在值中添加10只会附加10,但是......所以它是一个元组?

import random
d={}
num_points=8
def find_rand_points(num_points):
    for i in range(num_points):
        d[i]=(random.randrange(-250,251),random.randrange(-250,251))

d[0][0]=d[0][0]+[10]

我很困惑为什么他们首先是元组,因为我认为randrange会返回整数。我可以看出它为什么不起作用,因为元组是不可变的。我试图让它们像数组一样添加,但我对Python很新。

1 个答案:

答案 0 :(得分:1)

元组是Python中的不可变对象。这意味着一旦初始化它们就无法更改。首先,您如何访问此元组?

让我们的词典如下

import random
d={}
num_points=8
for i in range(num_points):
    d[i]=(random.randrange(-250,251),random.randrange(-250,251))
print(d)
  

{0:(229,-137),1:(178,71),2:(7,19),3:(180,150),4:   (-126,-65),5:(-235,80),6:( - 174,-241),7:(200,16)}

然后,我们可以访问其中一个2D点

d[0]
  

(229,-137)

然后我们可以尝试访问此坐标的第一个数字

d[0][0]
  

229

但现在让我们尝试将此值更改为

d[0][0] = d[0][0] + 10
  

----------------------------------------------- ---------------------------- TypeError Traceback(最近一次调用   最后)in()   ----> 1 d [0] [0] = d [0] [0] + 10

     

TypeError:' tuple'对象不支持项目分配

这不起作用。它告诉我们元组不支持项目分配。它无法改变。

使用列表

您应该使用列表。在坐标创建步骤中将( )替换为[ ]

import random
d={}
num_points=8
for i in range(num_points):
    d[i]=[random.randrange(-250,251),random.randrange(-250,251)]

现在我们可以这样做,它会在第一个坐标的第一个维度上添加10个。

d[0][0] = d[0][0] + 10

使用numpy矩阵

您可以将每一行设置为每个坐标,然后列代表坐标中的第一个和第二个值。

import numpy as np

num_points=8
d = np.zeros((num_points, 2))
for i in range(num_points):
    d[i,0], d[i,1]= random.randrange(-250,251), random.randrange(-250,251)

d[0]
  

数组([ - 233。,92。])

d[0,1] += 100
  

数组([ - 233。,192。])