Python 从两个不同的列表中删除类似项

Python 从两个不同的列表中删除类似项,python,list,Python,List,有没有一种更像python的方式来执行这段代码 sim_inits = [1,100, 12, 3520, 1250] prod_inits = [2, 101, 13, 14, 3521, 1500] for t in range(len(sim_inits)-1): sim_loop_done = False for s in sim_inits[:]: if sim_loop_done == True: continue

有没有一种更像python的方式来执行这段代码

sim_inits = [1,100, 12, 3520, 1250]
prod_inits = [2, 101, 13, 14, 3521, 1500]
for t in range(len(sim_inits)-1):
    sim_loop_done = False

    for s in sim_inits[:]:
        if sim_loop_done == True:
            continue

        prod_loop_done = False
        for p in prod_inits[:]:
            if prod_loop_done == True:
                continue

            if abs(s-p) < 3 :
                sim_inits.remove(s)
                prod_inits.remove(p)
                sim_loop_done = True
                prod_loop_done = True
print sim_inits
print prod_inits
我试图在这两个列表上循环,当我找到一个匹配项(由小于3的差值定义)时,我想转到下一项。我不希望从
prod_inits
中删除14,因为从
sim_inits
中删除的12与
prod_inits
中的13相对应


上面的代码很有效,我只是想知道是否可以更有效地完成。

您可以跳过其中一个循环,并且可以使用
中断
而不是
继续
来尽早退出另一个循环,而不必使用当前使用的繁琐标志

列表切片非常昂贵-尤其是在
prod_inits
的情况下,您要复制整个列表,只需从其中删除一个元素。按索引进行迭代,然后使用
pop()
而不是
remove()
来删除该索引更便宜。类似地,我们可以使用
while
循环在列表
s
中计数(而不是
for
循环),因为它允许我们通过这样做来适应我们正在移除的元素(因此我们做
s-=1


这正是我想要的,更快、更干净、更直接——谢谢
[1250]
[14, 1500]
sim_inits = [1,100, 12, 3520, 1250]
prod_inits = [2, 101, 13, 14, 3521, 1500]
s = 0
while s < len(sim_inits):
    for p in range(len(prod_inits)):
        if abs(sim_inits[s]-prod_inits[p]) < 3:
            sim_inits.pop(s)
            prod_inits.pop(p)
            s -= 1
            break
    s += 1

print(sim_inits)
print(prod_inits)
>>> print(sim_inits)
[1250]
>>> print(prod_inits)
[14, 1500]