【问题标题】:How to add (not append) a number to an existing value in a tuple? [duplicate]如何将数字添加(不附加)到元组中的现有值? [复制]
【发布时间】:2020-07-11 19:01:38
【问题描述】:

我怎样才能在不出错的情况下做这样的事情:

x,y = 0,0
x2,y2 = 1,1
lst = [(x,y), (x2,y2)]
lst[0][1] += 32

当我这样做时,我得到一个 TypeError,并且 try 方法没有做我想做的事情。

【问题讨论】:

  • 元组是不可变的,你可以使用列表

标签: python python-3.x list tuples


【解决方案1】:

在元组的documentation 中指定:

元组是不可变的,通常包含一个异构的序列 通过解包访问的元素

因此您可以执行以下操作:

方法一:新建元组

x, y = 0, 0
x2, y2 = 1, 1
lst = [(x, y), (x2, y2)]
lst[0] = (lst[0][0], lst[0][1] + 32)

print(lst)

输出

[(0, 32), (1, 1)]

方法二:使用列表

x, y = 0, 0
x2, y2 = 1, 1
lst = [[x, y], [x2, y2]]
lst[0][1] +=  32

print(lst)

输出

[[0, 32], [1, 1]]

【讨论】:

    【解决方案2】:

    元组是不可变的。正如@ Dani Mesejo 建议的那样,您可以使用列表。

    我建议将您的元组列表转换为列表列表:

    x,y = 0,0
    x2,y2 = 1,1
    lst = [(x,y), (x2,y2)]
    
    # Do the conversion here. 
    # Could just start out with a list of lists as well. 
    lst = [list(x) for x in lst]
    
    lst[0][1] += 32
    
    print(lst)
    # [[0, 32], [1, 1]]
    

    从列表列表开始会让事情变得更容易:

    lst = [[0,0], [1,1]]
    
    lst[0][1] += 32
    
    print(lst)
    # [[0, 32], [1, 1]]
    

    【讨论】:

      【解决方案3】:

      也许是这样的?

      x, y = 0, 0
      x2, y2 = 1, 1
      lst = [(x, y), (x2, y2)]
      lst[0] = (lst[0][0], lst[0][1] + 32)
      
      >> [(0, 32), (1, 1)]
      

      【讨论】:

        【解决方案4】:

        根据 w3schools https://www.w3schools.com/python/python_tuples.asp

        一旦创建了一个元组,就不能更改它的值。元组是不可更改的,或者说是不可变的。

        但是有一个解决方法。您可以将元组转换为列表、更改列表并将列表转换回元组。

        x = (1, 2, 3)
        y = (4, 5, 6)
        
        x1 = list(x)
        y2 = list(y)
        z = [x1, y2]
        z[0][1] += 32
        x = tuple(z[0])
        y = tuple(z[1])
        
        print(z) returns:
        [[1, 32, 3], [4, 5, 6]]
        
        print(x) returns:
        (1, 34, 3)
        
        
        print(y) returns:
        (4, 5, 6)
        
        

        【讨论】:

          【解决方案5】:

          正如 Dani 在他的评论中指出的那样,元组是不可变的。

          您应该创建一个新元组并像这样交换元组:

          lst[0] = (lst[0][0], lst[0][1] + 32)
          lst
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-03-12
            • 2023-03-07
            • 1970-01-01
            • 2014-06-29
            • 2020-04-03
            • 1970-01-01
            • 2020-11-01
            • 2017-04-05
            相关资源
            最近更新 更多