python – 比较两个列表以返回一个列表,其中所有元素都为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]

我事先不知道任何一个列表中的数字元素.

我试过循环但是

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

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

最佳答案 以下将有效:

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]
点赞