Python列表比较生成无限循环

时间:2018-04-24 15:15:47

标签: 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然后永不退出。

有人能告诉我无限循环的原因吗?

我知道这不是最好的&#34; python&#34;做事的方式,但是我的编码背景包括一个非常小的,蛮力的C技术,我不太了解Python。

如果有简单的替代品,请告诉我,以及为什么它永远不会退出。

2 个答案:

答案 0 :(得分:0)

如果你想使用列表理解,请使用类似这样的东西

[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的Clean set解决方案:

>>> a = [1, 2, 4]
>>> b = [3, 1, 5, 2]
>>> list(set(a).intersection(b))
[1, 2]

因为我最初认为标题说列表理解我给你一个列表理解答案。你应该绝对使用克里斯的解决方案。

这是一个(非统计上显着的)基准,显示原因

>>> 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

答案 1 :(得分:0)

我想你想做这样的事情:

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

或with for(和更漂亮):

a = [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])

这将显示值相等的索引。