如何为元组增加价值?

Sha*_*zad 73 python tuples

我正在编写一个脚本,我有一个像元组的列表('1','2','3','4').例如:

list = [('1','2','3','4'),
        ('2','3','4','5'),
        ('3','4','5','6'),
        ('4','5','6','7')]
Run Code Online (Sandbox Code Playgroud)

现在我需要添加'1234','2345','3456''4567'分别为每个元组的结尾.例如:

list = [('1','2','3','4','1234'),
        ('2','3','4','5','2345'),
        ('3','4','5','6','3456'),
        ('4','5','6','7','4567')]
Run Code Online (Sandbox Code Playgroud)

有可能吗?

And*_*Dog 123

元组是不可变的,不应该被更改 - 这就是列表类型的用途.您可以替换每个元组originalTuple + (newElement,),从而创建一个新的元组.例如:

t = (1,2,3)
t = t + (1,)
print t
(1,2,3,1)
Run Code Online (Sandbox Code Playgroud)

但我宁愿建议从一开始就使用列表,因为它们插入项目的速度更快.

另一个提示:不要覆盖程序中的内置名称list,而是调用变量l或其他名称.如果覆盖内置名称,则不能再在当前范围内使用它.

  • 简写`t + = 1,` (20认同)
  • 然而,非常好的一点是,我处于不幸的情况,我想迭代地将值添加到“sqlite3”数据库,并且需要创建要添加的值的元组(因为所需的语法是“VALUES (v1, v2, v3, ...)`. 在这种情况下,知道如何向元组添加值是非常有益的。 (2认同)

atp*_*atp 15

基于语法,我猜这是Python.元组的要点是它是不可变的,所以你需要用一个新的元组替换每个元素:

list = [l + (''.join(l),) for l in list]
# output:
[('1', '2', '3', '4', '1234'), 
 ('2', '3', '4', '5', '2345'), 
 ('3', '4', '5', '6', '3456'), 
 ('4', '5', '6', '7', '4567')]
Run Code Online (Sandbox Code Playgroud)

  • 这确实有用.但这应该真的完成吗?我想知道.因为这首先打败了一个元组的目的.还是我错了? (5认同)

Pab*_*ruz 8

在Python中,你不能.元组是不可变的.

在包含列表中,您可以('1', '2', '3', '4')使用不同的('1', '2', '3', '4', '1234')元组替换元组.


小智 7

正如其他人已经回答的那样,python中的元组是不可变的,"修改"元组的唯一方法是创建一个包含附加元素的新元素.

但最好的解决方案是列表.当需要调用元组的任何函数或方法时,使用元组(list)创建元组.


Ter*_*its 6

正如其他答案中提到的那样,元组一旦创建便是不可变的,并且列表可能会更好地满足您的目的。

也就是说,使用额外的项目创建新元组的另一种方法是使用splat运算符:

new_tuple = (*old_tuple, 'new', 'items')

我喜欢这种语法,因为它看起来像一个新的元组,因此可以清楚地传达您要执行的操作。

使用splat,可能的解决方案是:

list = [(*i, ''.join(i)) for i in list]

  • 这在python 2.7中不起作用 (2认同)

Dip*_*pak 5

我正在查看与tupleand相关的一些细节list,我的理解是:

  • 元组是Heterogeneous集合数据类型
  • 元组具有固定长度(每个元组类型)
  • 元组总是有限的

因此,要将新项目附加到元组,需要将其转换为list,并对其进行append()操作,然后再次将其转换回元组。

但我个人是什么,我觉得这样一个问题,如果元组应该是有限的固定长度的东西,如果我们在我们的应用程序逻辑使用这些数据类型的话,应该不会是追加新项目或更新中的一个项目价值的情景它。因此,而不是元组列表,它应该是列表本身的列表,我对吗?