Python - 分配变量

时间:2017-09-19 07:27:55

标签: python-3.x function variables

enter image description here

我有一张如上图所示的树形图:

我的数据Vnew =[12,13,14,15,16] - 没有可用的坐标

     `V =[1,2,3,4,5,6,7,8,9,10,11]` 

- 此列表中的每个点都有一个预定义的坐标。

我需要什么: 1)以变量的形式为Vnew中的每个点分配坐标;例如:

   newpos = {(x0,y0):12,(x1,y1):13,(x2,y2):14,(x3,y3):15,(x4,y4):16}

此处每个(xi,yi)都是一个变量。

2)我需要将一个函数定义为具有边缘的每个点之间的欧几里德距离的总和。对于给定的示例,我的函数将是

              `f(x,y) = ED(12,13)+ED(13,3)+ED(12,15)+ED(15,10)` 

其中x =[x0,x1,x2,x3]y =[y0,y1,y2,y3]以及ED是欧几里德距离。

我尝试将变量指定为

Vnew = [12,13,14,15,16]
d = {}
for v in Vnew: 
    for i in range(5):
        d[('x' + str(i),'y' + str(i))]= v
    print (d)

但这给了我一些东西。

{('x0', 'y0'): 12, ('x1', 'y1'): 12, ('x2', 'y2'): 12, ('x3', 'y3'): 12, ('x4', 'y4'): 12}
{('x0', 'y0'): 13, ('x1', 'y1'): 13, ('x2', 'y2'): 13, ('x3', 'y3'): 13, ('x4', 'y4'): 13}
{('x0', 'y0'): 14, ('x1', 'y1'): 14, ('x2', 'y2'): 14, ('x3', 'y3'): 14, ('x4', 'y4'): 14}
{('x0', 'y0'): 15, ('x1', 'y1'): 15, ('x2', 'y2'): 15, ('x3', 'y3'): 15, ('x4', 'y4'): 15}
{('x0', 'y0'): 16, ('x1', 'y1'): 16, ('x2', 'y2'): 16, ('x3', 'y3'): 16, ('x4', 'y4'): 16}

有人可以帮我做这两件事吗?

2 个答案:

答案 0 :(得分:1)

只需从vars访问它们:

Vnew = [12,13,14,15,16]
d = {}
vars_access = vars()
for i, v in enumerate(Vnew):):
    k=(vars_access['x{}'.format(i)], vars_access['y{}'.format(i)])
    d[k]= v
print (d)

这里有live example

对于你想要的东西,它在python中是不可能的,看看这个example

a, b, c = range(3)

t = (a, b, c)
l = [a, b, c]

print(a)
print(t)
print(l)

a += 1

print(a)
print(t)
print(l)

#RESULTS
0
(0, 1, 2)
[0, 1, 2]
1
(0, 1, 2)
[0, 1, 2]

由于整数在python中是不可变的,所以当你构建列表或带有变量的元组时,python会将它们绑定到变量所指向的当前值。因此,当您修改变量时,添加一个python真正正在做的是创建另一个整数或从现有整数中选择(整数不能变异)并使变量指向那个变量,所以在列表和元组中你会丢失该轨道

总而言之,只需将strings与变量名称一起使用,然后使用它们通过vars

访问当前变量值

答案 1 :(得分:1)

也许像

Vnew = [12,13,14,15,16]
d = {}
for i, v in enumerate(Vnew): 
    d[('x' + str(i),'y' + str(i))]= v
    print (d)