如何在Python中为列表中的变量分配值?

时间:2018-12-06 13:21:57

标签: python

我有一个变量列表,我想在其中更改值。 我试过了,但显然行不通

a,b,c=1,2,3
for i in [a,b,c]:
    i=1
print(a,b,c) #1 2 3

实际情况:我想使其更加简洁,因为它们相似,只有node.left和node.right不同。这是二叉树字符串的一部分。

temp=array.pop(0)
if not temp=='':
    array, node.left=deserialize(array, Node(temp), False)
temp=array.pop(0)
if not temp=='':
    array, node.right=deserialize(array, Node(temp), False)
if isFirst: return node
return array, node

4 个答案:

答案 0 :(得分:4)

您可以尝试

def trial():
  number_list = [1, 2, 3]

  for item, value in enumerate(number_list):
      number_list[item] = 1

  print(number_list)

if __name__ == "__main__":
  trial()

答案 1 :(得分:0)

您的对象列表包含整数对象。在Python中,名称(我相信是单词)被映射到对象。在执行FOR循环时,名称i映射到整数对象的副本,该副本由a(连续b和c)映射。 因此,实际上您是在更改副本,而不是原始对象。 如果我没有记错的话.... 另一件事,如果执行以下操作,您会注意到x是整数列表而不是变量列表:

a,b,c=1,2,3
x=[a,b,c]
x
    [1, 2, 3]
a=0
x
    [1, 2, 3]

答案 2 :(得分:0)

要获取数量可变的命名变量,请使用字典:

d = dict(zip('abc', range(1, 4)))  # {'a': 1, 'b': 2, 'c': 3}
d = {k: 1 for k in d}              # {'a': 1, 'b': 1, 'c': 1}

如果您只关心最终结果,只需使用dict.fromkeys

d = dict.fromkeys('abc', 1)        # {'a': 1, 'b': 1, 'c': 1}

然后使用d['a']d['b']等来检索值。

答案 3 :(得分:0)

我觉得答案还没有真正回答您的问题。

首先,列表是可变的,这意味着它们的内容可以随意更改。整数不可变,这意味着它们的内容无法更改。这是一种简化,有关更多信息,请参见{{3}}。

[a, b, c]-这将使用a,b和c的瞬时值构造一个列表。 遍历此列表时,由于列表是可变的,因此可以更改列表的内容,但是,整数本身不会更改,因为它们是不变的。 Python在这里所做的(在幕后)是创建一个值为1的新整数对象,并将指针切换到该新对象。

结果是,当您要求a,b和c的原始值时,它们不变-因为它们无法只能被替换。这是一个示例代码块,希望可以更好地演示这一点:

immutable_int = 1
mutable_list = [immutable_int]
for i in range(len(mutable_list)):
    # mutate the list by changing the pointer of the element
    mutable_list[i] = 2

print(immutable_int)
print(mutable_list)

这将打印以下内容:

>>> 1
>>> [2] 

本质上,列表可以在适当的位置更改,它仍然是相同的列表,并且仍指向相同的内存。当我们更改整数时,我们使用的先前整数不变,因为整数不可变,因此必须创建新的整数。

为了实现您的期望,您可以做很多事情,我想到的第一件事就是将它们初始化为列表并像这样使用它们,就像这样:

change_list = [1, 2, 3]

for i in range(len(change_list)):
    change_list[i] = 1

print(change_list)

让我知道我的答案是否完整或您仍然感到困惑。