【问题标题】:Inserting an item in a Tuple [duplicate]在元组中插入一个项目[重复]
【发布时间】:2011-01-19 12:59:46
【问题描述】:

是的,我知道元组是不可变的,但情况是我需要在每个元组中插入一个额外的值。所以其中一个项目是金额,我需要在它旁边添加一个不同货币的新项目,如下所示:

('Product', '500.00', '1200.00')

可能吗?

谢谢!

【问题讨论】:

  • 欢迎来到函数式编程。你不是updating 一个元组,你是从一个旧元组创建一个新元组。使用collections.namedtuple,很明显您正在从旧类型的对象创建新类型的对象。

标签: python insert tuples


【解决方案1】:

您可以将其转换为列表,插入项目,然后将其转换回元组。

a = ('Product', '500.00', '1200.00')
a = list(a)
a.insert(3, 'foobar')
a = tuple(a)
print a

>> ('Product', '500.00', '1200.00', 'foobar')

【讨论】:

  • 或任何一种不修改原始元组,而是替换它的方法。
  • 这确实不是一个好的解决方案。您可以使用+= ('foobar',) 来获得相同的效果。
  • 在python 3.8中会报错。
【解决方案2】:

由于元组是不可变的,这将产生一个新的元组。只需将它放回旧的地方即可。

sometuple + (someitem,)

【讨论】:

    【解决方案3】:

    您绝对需要创建一个新元组——然后您可以将旧元组中的名称(或任何引用[s])重新绑定到新元组。 += 运算符可以提供帮助(如果只有一个对旧元组的引用),例如:

    thetup += ('1200.00',)
    

    是否一举完成追加和重新绑定。

    【讨论】:

    • 是的,正如我所学的那样:P += 不会尝试修改引用,它会重新分配
    • @Matt,确切地说——但是对于一个元组或字符串,这就是你所能做的(如果你将它应用到一个列表中,它确实就地修改它—— - “重新分配”部分的开销可以忽略不计),
    • 总是惹我生气。 += 在我看来应该是就地修改。如果你做不到,就不要表现出来。虽然我不是 Python 规范,但很明显,无论我怎么看,它都按照它的定义去做。无论如何,这不是一个客观理智的抱怨 - 整数是可变的,你可以 += 他们很容易,这再次意味着替换。基本上是语言模型之间的直觉冲突。
    • 糟糕——整数当然是不可变的
    • 在 C++ 中,您可以 + 一个 const int,但不能 += 一个 const int。我我是非理性的(或者更确切地说“不是客观理智的”),我还说“语言模型之间的直觉冲突”。没有人咆哮——我只是在评论。尽管过去我们在 comp.lang.python 上进行相关讨论时,我可能一直在咆哮。
    【解决方案4】:
    def tuple_insert(tup,pos,ele):
        tup = tup[:pos]+(ele,)+tup[pos:]
        return tup
    
    tuple_insert(tup,pos,9999)
    

    tup:元组
    pos: 要插入的位置
    ele: 要插入的元素

    【讨论】:

      【解决方案5】:

      对于不添加到元组末尾的情况

      >>> a=(1,2,3,5,6)
      >>> a=a[:3]+(4,)+a[3:]
      >>> a
      (1, 2, 3, 4, 5, 6)
      >>> 
      

      【讨论】:

        【解决方案6】:

        您也可以像这样简单地编写代码:

        T += (new_element,)
        

        【讨论】:

          【解决方案7】:
          t = (1,2,3,4,5)
          
          t= t + (6,7)
          

          输出:

          (1,2,3,4,5,6,7)
          

          【讨论】:

            【解决方案8】:

            一种方法是将其转换为列表

            >>> b=list(mytuple)
            >>> b.append("something")
            >>> a=tuple(b)
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-07-03
              • 2013-01-24
              • 1970-01-01
              • 2013-12-06
              相关资源
              最近更新 更多