我从下面的代码中收到“列表索引超出范围”错误。代码的目的是确定两个列表中存在的值。我知道可能有更简洁的方法来编写这些代码,但这是我的解决方案,我想知道是否有可能这样做。
我尝试从数组的长度中减去一个(在'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。
使用:
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
中的值之间的值。你不需要在每次迭代时显式增加n1
或n2
,Python会处理这个问题。
我假设您来自Java之类的语言,您主要通过访问索引处的元素来遍历列表或数组。
在Python中,您可以迭代遍历列表的元素。所以在你的情况下,你可以写类似的东西
for n1 in a:
for n2 in b:
if n1 == n2:
print(n1)
...
我想这个列表理解能解决你所需要的:
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]
以下代码可能是一个更简洁的版本,以实现您的目标:
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)