如何为元组增加价值?

时间:2011-02-06 12:50:35

标签: python tuples

我正在编写一个脚本,其中包含('1','2','3','4')等元组列表。 e.g:

list = [('1','2','3','4'),
        ('2','3','4','5'),
        ('3','4','5','6'),
        ('4','5','6','7')]

现在我需要在每个元组的末尾分别添加'1234''2345''3456''4567'。 e.g:

list = [('1','2','3','4','1234'),
        ('2','3','4','5','2345'),
        ('3','4','5','6','3456'),
        ('4','5','6','7','4567')]

有可能吗?

8 个答案:

答案 0 :(得分:109)

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

t = (1,2,3)
t = t + (1,)
print t
(1,2,3,1)

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

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

答案 1 :(得分:13)

基于语法,我猜这是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')]

答案 2 :(得分:8)

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

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

答案 3 :(得分:6)

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

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

答案 4 :(得分:5)

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

那就是说,使用额外项创建新元组的另一个选项是使用splat运算符:

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

我喜欢这种语法,因为它看起来就像一个新的元组,所以它清楚地传达了你想要做的事情。

使用splat,一个潜在的解决方案是:

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

答案 5 :(得分:4)

我正在浏览与tuplelist相关的一些细节,我理解的是:

  • 元组是Heterogeneous集合数据类型
  • 元组固定长度(每元组类型)
  • 元组始终有限

因此,要将新项目附加到元组,需要将其强制转换为list,然后对其执行 append() 操作,然后再将其强制转换为元组。< / p>

  

但我个人对该问题的看法是,如果元组应该是有限固定长度项目,如果我们正在使用那些应用程序逻辑中的数据类型应该是附加新项目或更新项目值的方案。   因此,不是元组列表,而是列表本身,我是否正确?

答案 6 :(得分:2)

    list_of_tuples = [('1', '2', '3', '4'),
                      ('2', '3', '4', '5'),
                      ('3', '4', '5', '6'),
                      ('4', '5', '6', '7')]


    def mod_tuples(list_of_tuples):
        for i in range(0, len(list_of_tuples)):
            addition = ''
            for x in list_of_tuples[i]:
                addition = addition + x
            list_of_tuples[i] = list_of_tuples[i] + (addition,)
        return list_of_tuples

    # check: 
    print mod_tuples(list_of_tuples)

答案 7 :(得分:0)

OUTPUTS = []
for number in range(len(list_of_tuples))):
    tup_ = list_of_tuples[number]
    list_ = list(tup_)  
    item_ = list_[0] + list_[1] + list_[2] + list_[3]
    list_.append(item_)
    OUTPUTS.append(tuple(list_))

您想要的是输出