Python 错误:在列表之间交换期间,列表索引超出范围
您好,我已经运行了此代码,它适用于前2个列表,但在第三个列表中出现错误,以下是代码:Python 错误:在列表之间交换期间,列表索引超出范围,python,Python,您好,我已经运行了此代码,它适用于前2个列表,但在第三个列表中出现错误,以下是代码: b = [[1,2],[3,4],[5,6]] c = [1, 1, 2] for i, item in enumerate(c): target_i = (i + 1) % 3 temp = b[i][item] b[i][item] = b[target_i][item] b[target_i][item] = tem
b = [[1,2],[3,4],[5,6]]
c = [1, 1, 2]
for i, item in enumerate(c):
target_i = (i + 1) % 3
temp = b[i][item]
b[i][item] = b[target_i][item]
b[target_i][item] = temp
print(b)
这是输出:
[[1, 4], [3, 2], [5, 6]]
[[1, 4], [3, 6], [5, 2]]
Traceback (most recent call last):
File "C:/Python34/LEARN/play/dapatkan_index2.py", line 7, in <module>
temp = b[i][item]
IndexError: list index out of range
[[1,4]、[3,2]、[5,6]]
[[1, 4], [3, 6], [5, 2]]
回溯(最近一次呼叫最后一次):
文件“C:/Python34/LEARN/play/dapatkan_index2.py”,第7行,在
温度=b[i][项目]
索引器:列表索引超出范围
由于c
包含1,2
中的值,语句b[i][item]
将索引到b[0][1]
,b[0][2]
。。等。若要修复,您可能希望b[i][item-1]
,或者更改c
中的值,您可能应该在之前添加一个检查,查看迭代值是否低于列表b的长度。你应该这样做
for i, item in enumerate(c):
if i < len(b):
if item < len(b[i]):
<your code>
else :
pass
对于i,枚举(c)中的项:
如果i
如果i(c的列表索引)或c[i]的值大于列表索引,则会出现此错误。
在else语句中,我刚刚给出了一个pass语句,但是您必须找出代码需要什么并添加它。我无法更改'c'的值,因为它是从其他函数生成的,通过向'item'添加-1,它将更改需要交换的位置
item
是1
还是2
。由于每个b[i]
都是长度为2的列表,因此使用2
对其进行索引(在第三次迭代中使用)会导致它失败,因为您访问了其中的第三个元素。