如何修复列表索引超出范围错误?

时间:2019-04-04 08:05:27

标签: python

我收到以下列表中的“列表索引超出范围”错误。该代码的目的是确定两个列表中都存在的值。我知道可能有更简洁的代码编写方式,但这是我的解决方案,我想知道是否有可能这样做。

我尝试从数组的长度中减去一个(在'for'范围内),看是否是问题所在,但仍然返回相同的错误。

a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
n = 0
n2 = 0
for n1 in range(0, len(a)-1):
    for n2 in range(0, len(b)-1):
        if a[n1] == b[n2]:
            print(a[n1])
            n2 += 1
        else:
            n2 += 1
        n1 += 1

如果代码正常工作,它将打印数字:1、1、2、3、5、8和13。

4 个答案:

答案 0 :(得分:1)

我假设您来自Java之类的语言,主要通过访问索引中的元素来遍历列表或数组。

在Python中,您可以改为遍历列表的元素。因此,就您而言,您可以写类似

for n1 in a:
    for n2 in b:
        if n1 == n2:
            print(n1)
            ...

答案 1 :(得分:0)

使用:

a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
n = 0
n2 = 0
for n1 in range(0, len(a)):
    for n2 in range(0, len(b)):
        if a[n1] == b[n2]:
            print(a[n1])                
        else:
            pass
#Output:
1
1
2
3
5
8
13

说明:迭代发生在范围0到length_of_list之间,并且代码正在比较n1中索引a的每个值和索引{{1}的值之间的值n2中的}。您无需在每次迭代中显式地递增bn1,Python会处理。

答案 2 :(得分:0)

我想这个列表理解可以解决您的需求:

a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
c = [i for i in a if i in b]

输出

[1, 1, 2, 3, 5, 8, 13]

答案 3 :(得分:0)

以下代码可能是实现您目标的更简洁的版本:

a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

ans = []
for n in a:
    if n in b:
        ans.append(n)

print(ans)