Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 错误:在列表之间交换期间,列表索引超出范围_Python - Fatal编程技术网

Python 错误:在列表之间交换期间,列表索引超出范围

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

您好,我已经运行了此代码,它适用于前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] = 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
对其进行索引(在第三次迭代中使用)会导致它失败,因为您访问了其中的第三个元素。