在Python3中为list和int的元组添加值

时间:2018-02-07 22:31:38

标签: python python-3.x

我在想是否有一个int元组和列表:

(5,[2,3])

第一个元素id表示列表的总和。

我可以在列表中追加一个值并同时更新总和吗? 结果看起来应该是这样的:

(10,[2,3,5])

感谢您的帮助。

4 个答案:

答案 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])