我是编程新手,我正在尝试实现一个与两个列表中出现的元素相交的函数。
我想用 while
循环实现这个函数,以便同时迭代列表。
假设两个列表已排序我正在使用此代码:
def intersection(l1, l2):
new_ls = []
i = 0
j = 0
while i < len(l1) and j < len(l2):
if l1[i] == l2[j]:
new_ls.append(l1[i])
i += 1
j += 1
return new_ls
但是,即使我在每次迭代中增加 i 和 j,它也会进入无限循环。我该如何解决这个问题?
非常感谢您的回答!
答案 0 :(得分:0)
索引必须每次递增!所以试试这个代码:
def intersection(l1, l2):
new_ls = []
i = 0
j = 0
while i < len(l1) and j < len(l2):
if l1[i] == l2[j]:
new_ls.append(l1[i])
i += 1
j += 1
return new_ls
使用您的原始代码,只有当 l1[i] == l2[j] 时,i 和 j 才会递增。
假设当 i = 1, j = 1 和
l1[i]
包含 100
l2[i]
包含 101
如果你写
if l1[i] == l2[j]:
new_ls.append(l1[i])
i += 1
j += 1
最后两行不能执行,因为条件l1[i] == l2[j]
是False。
答案 1 :(得分:0)
在上面的代码中,只有当 l1 和 l2 中的元素相同时,才会发生 i 和 j 的递增。
减少 i += 1
和 j += 1
的缩进,使其在每次循环时递增
def intersection(l1, l2):
new_ls = []
i = 0
j = 0
while i < len(l1) and j < len(l2):
if l1[i] == l2[j]:
new_ls.append(l1[i])
i += 1 # Here
j += 1 # and here
return new_ls
答案 2 :(得分:0)
从 python reddit 中了解了 product
模块中的 itertools
函数。
使用它你的功能变成:
from intertools import product
def intersection(l1, l2):
new_ls = []
for i1, i2 in product(l1, l2):
if i1 == i2:
new_ls.append(i1)
return new_ls
这不是很好吗?
这篇文章被称为The Art of Writing Loops in Python