我将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很新。
答案 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
您可以将每一行设置为每个坐标,然后列代表坐标中的第一个和第二个值。
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。])