我在想是否有一个int元组和列表:
(5,[2,3])
第一个元素id表示列表的总和。
我可以在列表中追加一个值并同时更新总和吗? 结果看起来应该是这样的:
(10,[2,3,5])
感谢您的帮助。
答案 0 :(得分:3)
不,你不能,因为元组是不可变的,因此无法修改总和。您将不得不创建一个新的元组。
>>> t = (5,[2,3])
>>> val = 5
>>> t_new = t[0] + val, t[1] + [val]
>>> t_new
(10, [2, 3, 5])
但是,您可能首先考虑使用可变数据结构。
答案 1 :(得分:3)
你可以这样做:
def addTup(tup, x):
return (tup[0]+x, tup[1]+[x])
a = (5,[2,3])
addTup(a, 22)
你必须创建一个新的元组,它主要由旧元组的值组成。此代码会将新项目添加到列表中,并同时更新总和值。你不能简单地修改它自己的元组,因为元组在python中是不可变的,你可以看到here。
答案 2 :(得分:1)
由于元组是不可变的,你必须创建一个全新的元组:
_, b = (5,[2,3])
final_results = (sum(b+[5]), b+[5])
输出:
(10, [2, 3, 5])
答案 3 :(得分:1)
这只是@FlashTek's answer的精彩版本。真正的问题是,如果这些值不是一成不变的话,是否有目的将这些值保存在tuple
中。
from collections import namedtuple
def add_value(n, x):
return n._replace(arrsum=n.arrsum+x, arr=n.arr+[x])
SumArray = namedtuple('SumArray', ['arrsum', 'arr'])
s = SumArray(5, [2, 3])
t = add_value(s, 10)
# SumArray(arrsum=15, arr=[2, 3, 10])