更新元组的元组

2024-04-25 09:33:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有

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

我试着用下面的代码来更新它。你知道吗

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

我希望结果是(('a',1), ('b',1), ('c',1), ('d',1))。但印出来的和原值一样。为什么? 当我在循环中插入print tup时,我看到tup被更新了。你知道吗


Tags: 代码inforprinttuptuples原值
3条回答

正如其他人已经指出的,元组是不可变的。因此,它们不能被修改。如果需要可变性来允许修改,那么应该改用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,您应该能够得到您想要的。你知道吗

元组是不可变的,您不能更新它,但可以构建一个新元组。你知道吗

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

因为元组是不可变的。tup += (1,)将返回一个新的元组,您在循环中不使用它。你知道吗

话说回来,给你:

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

相关问题 更多 >