Python:for for loops over variables,如何分配给它们?

时间:2018-02-01 13:10:53

标签: 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

4 个答案:

答案 0 :(得分:3)

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

a = 1
b = 2
c = 3

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

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

答案 1 :(得分:0)

这应该可以解决问题:

abc = [1, 2, 3]

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

答案 2 :(得分:0)

使用可以使用字典和循环键,并轻松地将值分配给相应的键的值。

答案 3 :(得分:0)

当您遍历列表时,如下所示:for x in [a, b, c]:你是什么 正在做的是告诉python解释器创建一个重复分配不同值的变量x。这些值是abc的值。

这里需要注意的是,x未引用abc。也就是说,x不是a的别名,例如。它是一个不同的变量,恰好具有相同的值。

你可以这样想:

存在一个名为First Middle Last的人。他的名字是First,他的中间名是Middle,他的第三个名字是Last。这个First Middle Last人穿着一件红色毛衣。

有人称他为FirstMiddle的天气,没关系,这两个名字都指的是同一个人。如果你说First now wears a blue sweater然后问What colour is Middle's sweater,答案应该是blue。这是因为FirstMiddle都指的是同一个人。

然而,这不是您的迭代中发生的事情。在您的情况下,x a MiddleFirst的内容。相反,发生的事情更类似于此。

您有三个人,JohnJaneDoeabc)。 Johnblue件毛衣,Janered件毛衣,Doegreen件毛衣。这是a的值为1b的值为2c的值为3

一个接一个,你问他们,他们的毛衣是什么颜色的。当你发现时,你会说James, a person different from John, Jane or Doe, now has the same colour sweater。如果你随后改变詹姆斯毛衣的颜色,那么会影响约翰,简或多伊。

这解释了为什么你的代码没有做你想做的事情。

对于修复,一种可能的pythonic方式就是这样。

map(lambda x: x*2, [a, b, c])

更一般地说,map(transformation, array)

让我们回顾一下代码。如果您转到here,您会找到map的定义。

如您所见,map是一个内置函数,它将第一个参数作为函数。在我们的例子中,我们希望该函数乘以2。

为此目的,我们可以执行lambda x: x*2,它定义一个接受作为参数x的函数并返回x multiplied by two,或者,我们可以显式定义该函数。

def multiply_by_two(x):
    return x * 2

无论选择如何,这个想法仍然存在,你将给出map一个函数的第一个参数,该函数以你想要的方式转换输入。

这种情况下的输入依次是数组的每个元素。为了使其更加明确,让我们逐行进行示例。

致电map(multiply_by_two, [1, 2, 3])将转变为[multiply_by_two(1), multiply_by_two(2), multiply_by_two(3)],而[1 * 2, 2 * 2, 3 * 2]将转变为[2, 4, 6]。这将最终转换为map(multiply_by_two, [1, 2, 3]) Timeline调用的结果。

我希望这能帮助你更好地理解python。