更新元组的元组

Updating a tuple of tuples

我有

tuples = (('a',), ('b',), ('c',), ('d',))

我试着用下面的代码更新它。

for tup in tuples:
    tup += (1,)
print tuples

我预计结果会是 (('a',1), ('b',1), ('c',1), ('d',1))。但是它打印出来的值和原来的值一样。为什么? 当我在循环中插入 print tup 时,我看到 tup 已更新。

因为元组是不可变的。 tup += (1,) 将 return 一个你在循环中什么都不做的新元组。

话虽这么说,给你:

>>> tuples = (('a',), ('b',))
>>> tuple(tup + (1,) for tup in tuples)
(('a', 1), ('b', 1))

元组是不可变的,你不能更新它但你可以建立一个新的。

>>> l = (('a',), ('b',), ('c',), ('d',))
>>> tuple((i[0],1) for i in l)
(('a', 1), ('b', 1), ('c', 1), ('d', 1))

正如其他人已经指出的,元组是不可变的。因此,它们不能被修改。如果您需要可变性以允许修改,那么您应该改用 list

>>> # tuples; immutable
>>> tt = ((1, 2, 3), (1, 2, 3), (1, 2, 3))
>>> tt
((1, 2, 3), (1, 2, 3), (1, 2, 3))
>>> for e in tt: e += (4, )
...
>>> tt
((1, 2, 3), (1, 2, 3), (1, 2, 3))

>>> # lists; mutable
>>> ll = [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
>>> ll
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
>>> for e in ll: e += [4]
...
>>> ll
[[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]

如上所示,如果使用lists,应该可以得到你想要的。