交换存储在元组中的两个列表的位置
Swap positons on two lists stored in tuple
我有一个包含多个列表的元组,我需要动态交换两个列表中项目的值。例如,tuple_of_lists = (**list1**:[1,1,1],list2:[2,2,2],**list3**:[3,3,3])
我需要能够输入 --swap x & y (1,3)--
并且在不更改列表名称的情况下输出 (**list1**:[3,3,3],list2:[2,2,2],**list3**:[1,1,1]
)
对python(和一般的编码)还是很陌生,我认为我遗漏了一些关于数据结构的东西。
我正在尝试使用类似的东西:
intermediary = tuple_of_lists[1]
tuple_of_lists[1] = list(tuple_of_lists[3])
tuple_of_lists[3] = list(intermediary)
但是我收到一个错误,元组不接受赋值——即使它只是真正被更改的列表?有没有简单的方法可以解决?
你为什么要 TypeError: 'tuple' object does not support item assignment
?
元组在 python 中是不可变的。这意味着一旦 created/initialized,您将无法更改它们的内容。因此,元组不能位于赋值运算符的左侧,因此会出现错误。
解决方案:
一种可能的解决方案是就地更改列表,而不是更改对存储在元组中的列表的引用。考虑这个示例代码,
a_tuple = ([1,1,1],[2,2,2],[3,3,3])
x = 1
y = 3
# We'll use x-1 and y-1 for 0-based indexing
temp = a_tuple[x-1].copy() # Keep a copy in temporary variable
a_tuple[x-1].clear() # Empty first list
a_tuple[x-1].extend(a_tuple[y-1]) # Fill it with second list
a_tuple[y-1].clear() # Empty second list
a_tuple[y-1].extend(temp) # Fill it with first list
print(a_tuple)
输出
([3, 3, 3], [2, 2, 2], [1, 1, 1])
元组是不可变的,因此您不能更改它们的元素。然而,列表是可变的。
您可以做的是从您的元组创建一个列表,交换元素并将列表转换回元组:
tuple_of_lists = ([1,1,1], [2,2,2], [3,3,3])
lt = list(tuple_of_lists) #create list from tuple
lt[2],lt[0] = lt[0],lt[2] #swap items 0 and 2
tuple_of_lists = tuple(lt) #convert to tuple
print(tuple_of_lists)
输出:
([3,3,3], [2,2,2], [1,1,1])
我有一个包含多个列表的元组,我需要动态交换两个列表中项目的值。例如,tuple_of_lists = (**list1**:[1,1,1],list2:[2,2,2],**list3**:[3,3,3])
我需要能够输入 --swap x & y (1,3)--
并且在不更改列表名称的情况下输出 (**list1**:[3,3,3],list2:[2,2,2],**list3**:[1,1,1]
)
对python(和一般的编码)还是很陌生,我认为我遗漏了一些关于数据结构的东西。
我正在尝试使用类似的东西:
intermediary = tuple_of_lists[1]
tuple_of_lists[1] = list(tuple_of_lists[3])
tuple_of_lists[3] = list(intermediary)
但是我收到一个错误,元组不接受赋值——即使它只是真正被更改的列表?有没有简单的方法可以解决?
你为什么要 TypeError: 'tuple' object does not support item assignment
?
元组在 python 中是不可变的。这意味着一旦 created/initialized,您将无法更改它们的内容。因此,元组不能位于赋值运算符的左侧,因此会出现错误。
解决方案:
一种可能的解决方案是就地更改列表,而不是更改对存储在元组中的列表的引用。考虑这个示例代码,
a_tuple = ([1,1,1],[2,2,2],[3,3,3])
x = 1
y = 3
# We'll use x-1 and y-1 for 0-based indexing
temp = a_tuple[x-1].copy() # Keep a copy in temporary variable
a_tuple[x-1].clear() # Empty first list
a_tuple[x-1].extend(a_tuple[y-1]) # Fill it with second list
a_tuple[y-1].clear() # Empty second list
a_tuple[y-1].extend(temp) # Fill it with first list
print(a_tuple)
输出
([3, 3, 3], [2, 2, 2], [1, 1, 1])
元组是不可变的,因此您不能更改它们的元素。然而,列表是可变的。
您可以做的是从您的元组创建一个列表,交换元素并将列表转换回元组:
tuple_of_lists = ([1,1,1], [2,2,2], [3,3,3])
lt = list(tuple_of_lists) #create list from tuple
lt[2],lt[0] = lt[0],lt[2] #swap items 0 and 2
tuple_of_lists = tuple(lt) #convert to tuple
print(tuple_of_lists)
输出:
([3,3,3], [2,2,2], [1,1,1])