首页 > 解决方案 > 比较两个列表以返回一个列表,其中所有元素都为 0,除了在保持索引时匹配的元素?

问题描述

我对此有点坚持:

a = [1,2,3,2,4,5]
b = [2,5]

我想比较这两个列表并生成一个列表,其中包含与 相同的项目a,但没有b设置为 0 的任何项目。有效输出将是这些:

c = [0,2,0,0,0,5]
# or
c = [0,0,0,2,0,5]

我不会事先知道任一列表中的数字元素。

我试过for循环但是

['0' for x in a if x not in b]

它删除了 2 的所有实例。我只想删除一次(它b暂时出现一次)。我需要在上面添加一个条件loop来保持匹配的元素。

标签: pythonpython-3.xlist

解决方案


以下将起作用:

a = [1,2,3,2,4,5]
b = [2, 5]

output = []

for x in a:
    if x in b:
        b.remove(x)
        output.append(x)
    else:
        output.append(0)

或者对于单线,使用b.remove(x)返回的事实None

a = [1,2,3,2,4,5]
b = {2, 5}

output = [(b.remove(x) or x) if x in b else 0 for x in a]

推荐阅读