【问题标题】:Python - assigning variablesPython - 分配变量
【发布时间】:2017-09-19 07:27:55
【问题描述】:

我有一个如上的树形图:

我的数据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}

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

【问题讨论】:

    标签: python-3.x function variables


    【解决方案1】:

    可能是这样的

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

    【讨论】:

    • 谢谢山姆!我现在如何开始我的第二个需求?
    • @ccc 你希望ED()返回什么?
    • 每条边的欧几里得距离。
    【解决方案2】:

    只需从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访问当前变量值

    【讨论】:

    • vs 这么多,你不是直接覆盖了吗?
    • @SamRedway,是的,这是一个错误,我正在编写实时示例,感谢您指出 :)
    • 谢谢丹尼尔!!我从这段代码中得到的是 '{(0, 0): 12, (1, 1): 13, (2, 2): 14, (3, 3): 15, (4, 4): 16 }'。但我想要 '(0,0)' 作为变量坐标; '(x1,y1)'。
    • @ccc,然后只需使用字符串来存储它们并检索它们使用vars 作为字典,始终将这样的字符串作为键,在我的代码中你会得到变量的值,因为它们是int 并且它们在 python 中是不可变的。你不会得到你在 python 中的想法,你不能有一个带变量的元组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 2015-09-30
    • 2016-05-22
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多