开发者

Why tuple assignment failed?

开发者 https://www.devze.com 2023-04-05 08:11 出处:网络
I have tried to assign new data to existing tuple, and it does not work.and actually I want to addthe a and b to get a sum, however only string can be iterated..

I have tried to assign new data to existing tuple, and it does not work.and actually I want to add the a and b to get a sum, however only string can be iterated..

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

results:

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

开发者_开发百科

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


When you set a, b = int(a), int(b)+int(a), you do not change the actual object a and b came from; you just bind new objects the variables a and b...

You can create a new list B, and populate it:

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


You can use a list comprehension:

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


Tuples are immutable. Also, you're assigning new values to a,b in the for loop and doing nothing else with those new values.

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


Rather than creating a new list as per amit's answer you could use "enumerate" to get the index and write it back to your list which is, I think what you were trying to do.

enumerate() essentially returns a tuple of the current position in the iterable and then the value so you could do:

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

精彩评论

暂无评论...
验证码 换一张
取 消