我收到以下列表中的“列表索引超出范围”错误。该代码的目的是确定两个列表中都存在的值。我知道可能有更简洁的代码编写方式,但这是我的解决方案,我想知道是否有可能这样做。
我尝试从数组的长度中减去一个(在'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。
答案 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
中的}。您无需在每次迭代中显式地递增b
或n1
,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)