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

问题描述 投票:-1回答:4

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

我尝试从数组的长度中减去一个(在'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。

python
4个回答
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中的每个值与n2中索引b中的值之间的值。你不需要在每次迭代时显式增加n1n2,Python会处理这个问题。


1
投票

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

在Python中,您可以迭代遍历列表的元素。所以在你的情况下,你可以写类似的东西

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

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]

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)
© www.soinside.com 2019 - 2024. All rights reserved.