首页 > 解决方案 > 为什么比较列表时列表索引超出范围,但打印时却没有?

问题描述

我试图在转换为图像之前修改列表列表,但是当我按原样执行代码时出现索引错误:

#!/bin/python3
import matplotlib.image as img
import matplotlib.pyplot as plt
import numpy as np

plot_one=img.imread('RGB_test.png')

easy_list_1=plot_one.tolist()

plot_two=img.imread('RGB_test_2.png')

print(type(plot_two))

easy_list_2=plot_two.tolist()

ones=[1.0, 1.0, 1.0, 1.0]
print(easy_list_2[479])
print(easy_list_2[479][639])

for i in list(range(0,len(easy_list_1))):
    for ii in list(range(0,len(easy_list_1[i]))):
        for iii in [0,1,2,3]:
            if easy_list_1[i][ii] == easy_list_2[i][ii]:
                break

            elif easy_list_1[i][ii] == ones and easy_list_2[i][ii] != ones:
                    easy_list_1[i][ii]=easy_list_2[i][ii]
                    break

            else:
                easy_list_1=[min((easy_list_1[i][ii][iii]+easy_list_2[i][ii][iii]), 1)]

image=np.array(easy_list_1)

plt.imshow(image)

错误出现在 'if easy_list_1[i][ii] == easy_list_2[i][ii]:'

但是,当我注释掉代码以简单地打印时,它可以正常工作:

#!/bin/python3
import matplotlib.image as img
import matplotlib.pyplot as plt
import numpy as np

plot_one=img.imread('RGB_test.png')

easy_list_1=plot_one.tolist()

plot_two=img.imread('RGB_test_2.png')

print(type(plot_two))

easy_list_2=plot_two.tolist()

ones=[1.0, 1.0, 1.0, 1.0]
print(easy_list_2[479])
print(easy_list_2[479][639])

for i in list(range(0,len(easy_list_1))):
    for ii in list(range(0,len(easy_list_1[i]))):
        for iii in [0,1,2,3]:
            print(easy_list_1[i][ii])
            print(easy_list_2[i][ii])

不是预期的功能。

我知道这些事情有解决方案,但是根据我对索引错误的理解,我应该有相同的索引超出范围错误(即,如果您输入的索引大于列表的长度,程序将崩溃,因为它是'超出范围')。根据我对错误的理解,打印应该没有区别。

我错过了什么?

标签: python-3.xlistnumpy

解决方案


推荐阅读