更新元组的元组
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]]
如上所示,如果使用list
s,应该可以得到你想要的。
我有
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]]
如上所示,如果使用list
s,应该可以得到你想要的。