Python列表比较生成无限循环

Python列表比较生成无限循环,python,python-3.x,list,linked-list,infinite-loop,Python,Python 3.x,List,Linked List,Infinite Loop,因此,任务是: 取2个列表,编写一个程序,返回一个列表,该列表只包含这些列表共有的元素,没有重复项,并且它必须处理不同大小的列表 我的代码是: a = [1, 2, 4] b = [3, 1, 5, 2] for j < len(a): for i < len(b): if a(elem) == b(i): print (a(elem)) i=i+1 j=j+1 然后生成一个无限循环,其中它打印1,然后永不退

因此,任务是: 取2个列表,编写一个程序,返回一个列表,该列表只包含这些列表共有的元素,没有重复项,并且它必须处理不同大小的列表

我的代码是:

a = [1, 2, 4]
b = [3, 1, 5, 2]

for j < len(a):
    for i < len(b):
        if a(elem) == b(i):
            print (a(elem))
        i=i+1
    j=j+1
然后生成一个无限循环,其中它打印1,然后永不退出

有人能告诉我为什么会出现无限循环吗

我知道这不是python最常用的方式,但是我的编码背景包括一个非常小的C语言的蛮力技术,我对python知之甚少


如果有简单的替代方案,请让我知道,以及为什么它永远不存在

如果您想使用列表理解,请使用以下内容

[i for i in a if i in b]
哪个输出

>>> a = [1, 2, 4]
>>> b = [3, 1, 5, 2]
>>> [i for i in a if i in b]
[1, 2]

>>> b = [1, 2, 4]
>>> a = [3, 1, 5, 2]
>>> [i for i in a if i in b]
[1, 2]
或者使用@Chris_Rand的清洁设置解决方案:

>>> a = [1, 2, 4]
>>> b = [3, 1, 5, 2]
>>> list(set(a).intersection(b))
[1, 2]
因为我最初认为标题是“列表理解”,所以我给了你一个列表理解的答案。不过,你绝对应该使用Chris的set解决方案

下面是一个非统计意义的基准,说明了原因

>>> a = list(np.random.randint(0, 10000, size=500))
>>> b = list(np.random.randint(0, 10000, size=800))

>>> timeit.timeit(stmt='[i for i in a if i in b]', globals=globals(), number=1000)
9.176704404999327

>>> timeit.timeit(stmt='list(set(a).intersection(b))', globals=globals(), number=1000)
0.05484662300295895

我想你想做这样的东西:

a = [1, 2, 4]
b = [3, 1, 5, 2]
j=0
while j < len(a):
print("J:", j)
i = 0
while i < len(b):
    print("I:", i)
    if j == i:
        print ("match :", a[j], b[i])
    i=i+1
j=j+1

这将显示值相等的索引。

我在这里看不到列表。这是什么?对于ja = [1, 2, 4] b = [3, 1, 5, 2] for j in a: print("J:", j) for i in b: print("I:", i) if j == i: print ("match :", a[j], b[i])