Python实现列表元组(i,j)转(j,-i)报元组不支持项赋值错误
错误原因
- 元组是Python中的不可变序列类型,一旦创建就无法修改内部单个元素的值。你的代码中
A[i][j] = A[j][-i]的操作,本质是尝试修改列表A中存储的元组的内部元素,这是Python语法不允许的,因此直接抛出TypeError: 'tuple' object does not support item assignment错误。 - 除了元组不可变的问题,你的代码逻辑本身也不符合转换需求:
- 双层循环的写法完全偏离了「逐个转换列表中每个元组」的目标
range(0, len(A)-1)的索引范围只会遍历到列表倒数第二个元素,会漏掉最后一个元组- 取值逻辑
A[j][-i]和你要求的(i,j) -> (j,-i)转换规则没有对应关系,就算元组支持修改也得不到正确结果。
修改方案
不需要修改原有元组,只需要遍历列表中的每一个元组,按照转换规则生成新元组,替换列表对应位置的元素即可,参考代码如下:
A = [(0,0), (0,1), (1,0), (1,1)] for index, (i, j) in enumerate(A): # 按规则生成新元组,替换原位置的旧元组 A[index] = (j, -i) print(A)
运行后输出结果为:[(0, 0), (1, 0), (0, -1), (-1, -1)],和预期结果一致。
如果追求更简洁的写法,也可以直接用列表推导式生成新列表:
A = [(0,0), (0,1), (1,0), (1,1)] A = [(j, -i) for i, j in A]
内容的提问来源于stack exchange,提问作者Wiz123
相关产品推荐
相关产品推荐

