Python:对于循环变量,如何分配它们?

Python:对于循环变量,如何分配它们?,python,Python,我不知道如何循环变量,给它们赋值 a = 1; b = 2; c = 3 for x in [a, b, c]: print(x) 1 2 3 for x in [a, b, c]: x = x * 2 for x in [a, b, c]: print(x) 1 2 3 这应该可以做到: abc = [1, 2, 3] for i in range(len(abc)): abc[i] *= 2 您可以使用列表理解和元组解包 a = 1 b = 2 c = 3

我不知道如何循环变量,给它们赋值

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

1
2
3

for x in [a, b, c]:
  x = x * 2

for x in [a, b, c]:
  print(x)

1
2
3

这应该可以做到:

abc = [1, 2, 3]

for i in range(len(abc)):
    abc[i] *= 2

您可以使用列表理解和元组解包

a = 1
b = 2
c = 3

a, b, c = [i * 2 for i in [a, b, c]]

print(a, b, c)
# 2 4 6

Use可以使用字典和循环键,并可以轻松地将值指定给相应键的值

当你遍历一个列表时,就像这样:对于[a,b,c]中的x: 我们正在做的是告诉python解释器创建一个变量x,该变量被重复地分配不同的值。这些值是a、b和c的值

这里需要注意的是,x没有引用a、b和c。也就是说,例如,x不是a的别名。这是一个不同的变量,恰好有相同的值

你可以这样想:

有一个人叫第一中间最后。他的名字是first,中间名是middle,第三名是Last。第一个中最后一个穿红色毛衣的人

不管是第一个还是第二个,这都无关紧要,这两个名字指的是同一个人。如果你先说现在穿蓝色毛衣,然后问Middle的毛衣是什么颜色,答案应该是蓝色。这是因为“第一”和“中间”都指同一个人

然而,这不是迭代中发生的事情。在你的例子中,x与a的关系并不等同于中间点与第一点的关系。相反,发生的事情与此更为相似

你有三个人,约翰、简和多伊a、b、c。约翰有一件蓝色的毛衣,简有一件红色的毛衣,多伊有一件绿色的毛衣。这就是a的值为1,b的值为2,c的值为3的方式

你一个接一个地问他们,他们的毛衣是什么颜色的。当你发现后,你会说,詹姆斯,一个不同于约翰、简或多伊的人,现在有了同样颜色的毛衣。如果你随后改变詹姆斯毛衣的颜色,这不会影响约翰、简或多伊

这是一个解释,解释了为什么你的代码没有达到你想要的效果

至于修复,一种可能的python方法是这样的

map(lambda x: x*2, [a, b, c])
更一般地说,映射变换、数组

让我们看一下代码。如果你去,你会发现地图的定义

如您所见,map是一个内置函数,它接受函数的第一个参数。在我们的例子中,我们希望函数是2的乘法

为此,我们可以执行lambda x:x*2,它定义了一个函数,该函数接受参数x并返回x乘以2,或者,我们可以显式地定义该函数

def multiply_by_two(x):
    return x * 2
不管选择哪种,这个想法仍然成立,您将为map函数的第一个参数指定一个参数,该函数以您希望的方式转换输入

本例中的输入依次是数组的每个元素。为了使这一点更加明确,让我们逐行执行示例

调用mapmultiply_by_two,[1,2,3]将转换为[multiply_by_two1,multiply_by_two2,multiply_by_two3],然后转换为[1*2,2*2,3*2]。这将最终在[2,4,6]中进行转换,映射乘以[1,2,3]调用的结果


我希望这将帮助您更好地理解python。

您使用列表或dict而不是单个变量sl=[1,2,3];对于l中的x:@CristiFati如果在l:中为x指定,则分配给x也将不起作用。您可以使用enumerate和assign by index,尽管您可以对第二个示例使用列表理解[x*2 for x in range1,4]@chepner引文需要,列表包含变量,而不是名称这实际上非常好读。