Python列表比较生成无限循环
因此,任务是: 取2个列表,编写一个程序,返回一个列表,该列表只包含这些列表共有的元素,没有重复项,并且它必须处理不同大小的列表 我的代码是: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,然后永不退
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
这将显示值相等的索引。我在这里看不到列表。这是什么?对于j
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])