为什么元组赋值失败?

时间:2011-09-14 14:33:11

标签: python

我试图将新数据分配给现有元组,但它不起作用。实际上我想添加a和b来获得总和,但是只能迭代字符串..

A=[('3', '4'), ('3', '11'), ('8', '10')] 
  print A
for a,b in A:
  a,b = int(a), int(b)+int(a)
print A

结果:

[('3','4'),('3','11'),('8','10')]

[('3','4'),('3','11'),('8','10')]

4 个答案:

答案 0 :(得分:6)

当您设置a, b = int(a), int(b)+int(a)时,您不会更改实际对象ab来自;你只需将新对象绑定变量a和b ......

您可以创建一个新列表B,并填充它:

A=[('3', '4'), ('3', '11'), ('8', '10')] 
print A
B = []
for a, b in A:
    B.append((int(a), int(b) + int(a)))
print B

答案 1 :(得分:4)

您可以使用列表理解:

>>> [(int(i), int(i) + int(j)) for i, j in A]
[(3, 7), (3, 14), (8, 18)]

答案 2 :(得分:0)

元组是不可变的。此外,您正在为for循环中的a,b分配新值,而对这些新值不执行任何其他操作。

http://docs.python.org/library/functions.html#tuple http://en.wikipedia.org/wiki/Immutable_object

答案 3 :(得分:0)

您可以使用“枚举”来获取索引并将其写回列表,而不是根据amit的答案创建新列表,我想您正在尝试做什么。

enumerate()实际上返回了iterable中当前位置的元组,然后是值,这样你就可以做到:

for idx, (a, b) in enumerate(A):
    A[idx] = (int(a), int(b) + int(a))