【发布时间】: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
我怎样才能在不出错的情况下做这样的事情:
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
在元组的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]]
【讨论】:
元组是不可变的。正如@ 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]]
【讨论】:
也许是这样的?
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)]
【讨论】:
根据 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)
【讨论】:
正如 Dani 在他的评论中指出的那样,元组是不可变的。
您应该创建一个新元组并像这样交换元组:
lst[0] = (lst[0][0], lst[0][1] + 32)
lst
【讨论】: