无限循环遍历两个列表 - Python

时间:2021-05-08 10:49:57

标签: python while-loop

我是编程新手,我正在尝试实现一个与两个列表中出现的元素相交的函数。 我想用 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

但是,即使我在每次迭代中增加 ij,它也会进入无限循环。我该如何解决这个问题?

非常感谢您的回答!

3 个答案:

答案 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 += 1j += 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