TypeError: ‘tuple’ 对象不支持项目赋值
TypeError: ‘tuple’ object does not support item assignment
Python“TypeError: ‘tuple’ object does not support item assignment”发生在我们尝试更改元组中某个项目的值时。
要解决该错误,请将元组转换为列表,更改特定索引处的项目并将列表转换回元组。
下面是错误如何发生的示例。
my_tuple = ('a', 'b', 'c') # ⛔️ TypeError: 'tuple' object does not support item assignment my_tuple[0] = 'z'
我们尝试更新元组中的元素,但元组对象是不可变的,这导致了错误。
将元组转换为列表解决错误
我们不能为元组的单个项目赋值。
相反,我们必须将元组转换为列表。
my_tuple = ('a', 'b', 'c') # ✅ convert the tuple to a list my_list = list(my_tuple) print(my_list) # 👉️ ['a', 'b', 'c'] # ✅ update the item my_list[0] = 'z' # ✅ convert the list back to a tuple my_tuple = tuple(my_list) print(my_tuple) # 👉️ ('z', 'b', 'c')
这是一个三步过程:
- 使用list()类将元组转换为列表。
- 更新指定索引处的项目。
- 使用该类
tuple()
将列表转换回元组。
一旦有了列表,我们就可以更新指定索引处的项目,并可选择将结果转换回元组。
Python 索引是从零开始的,因此元组中的第一项的索引为0
,最后一项的索引为-1
or len(my_tuple) - 1
。
用更新后的元素构造一个新的元组
或者,您可以构造一个新的元组,其中包含指定索引处的更新元素。
def get_updated_tuple(tup, index, new_value): return tup[:index] + (new_value, ) + tup[index + 1:] my_tuple = ('a', 'b', 'c', 'd', 'e') index_to_update = 1 updated_value = 'Z' new_tuple = get_updated_tuple(my_tuple, index_to_update, updated_value) # 👇️ ('a', 'Z', 'c', 'd', 'e') print(new_tuple)
该get_updated_tuple
函数采用一个元组、一个索引和一个新值,并返回一个新元组,该新元组具有指定索引处的更新值。
原始元组保持不变,因为元组是不可变的。
我们更新了 index 处的元组元素1
,将其设置为Z
。
如果你只需要这样做一次,你就不必定义一个函数。
my_tuple = ('a', 'b', 'c', 'd', 'e') index_to_update = 1 updated_value = 'Z' # 👇️ notice that the updated_value is wrapped in a tuple new_tuple = my_tuple[:index_to_update] + \ (updated_value,) + my_tuple[index_to_update + 1:] # 👇️ ('a', 'Z', 'c', 'd', 'e') print(new_tuple)
代码示例在不使用可重用函数的情况下实现了相同的结果。
updated_value
用尾随逗号将括号括起来。加法 (+) 运算符左右两侧的值
必须都是元组。
元组切片的语法
是my_tuple[start:stop:step]
.
索引start
是包含的,stop
索引是排他的(最多,但不包括)。
如果start
省略索引,则认为是0
,如果stop
省略索引,则切片转到元组的末尾。
使用列表而不是元组
或者,您可以通过将元素括在方括号(而不是圆括号)中来从头开始声明列表。
my_list = ['a', 'b', 'c'] my_list[0] = 'z' print(my_list) # 👉️ ['z', 'b', 'c'] my_list.append('d') print(my_list) # 👉️ ['z', 'b', 'c', 'd'] my_list.insert(0, '.') print(my_list) # 👉️ ['.', 'z', 'b', 'c', 'd']
如果您必须经常更改集合中的值,则从头开始声明一个列表会更有效率。
元组旨在存储永不改变的值。
append()
方法将项目添加到列表末尾或使用该insert()
方法在特定索引处添加项目。元组在 Python 中是如何构造的
万一你错误地声明了一个元组,元组有多种构造方式:
- 使用一对括号
()
创建一个空元组 - 使用尾随逗号 –
a,
或(a,)
- 用逗号分隔项目 –
a, b
或(a, b)
- 使用
tuple()
构造函数
检查值是否为元组
您还可以通过在赋值之前检查值是否为元组来处理错误。
my_tuple = ('a', 'b', 'c') if isinstance(my_tuple, tuple): my_tuple = list(my_tuple) my_tuple[0] = 'Z' print(my_tuple) # 👉️ ['Z', 'b', 'c']
如果变量存储一个元组,我们将它设置为一个列表,以便能够更新指定索引处的值。
如果传入的对象是传入类的实例或子类,则isinstance函数返回
。True
如果不确定变量存储的类型,请使用内置type()
类。
my_tuple = ('a', 'b', 'c') print(type(my_tuple)) # 👉️ <class 'tuple'> print(isinstance(my_tuple, tuple)) # 👉️ True my_list = ['bobby', 'hadz', 'com'] print(type(my_list)) # 👉️ <class 'list'> print(isinstance(my_list, list)) # 👉️ True
类型
类
返回对象的类型。
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: