基于第二个列表作为索引更新列表元素

时间:2014-04-30 18:56:01

标签: python list

我希望从Python初学者那里得到一个不太难的问题。

我有一个主列表listA,我需要根据索引列表listB中的值将该列表中的项清零。

所以,例如,给定:

listA = [10, 12, 3, 8, 9, 17, 3, 7, 2, 8]
listB = [1, 4, 8, 9]

我想要的输出是

listC = [10, 0, 3, 8, 0, 17, 3, 7, 0, 0]

这个问题[1]看似相似,但要求删除元素,而不是更改。我不确定是否需要采用类似的方法,但如果是这样,我就无法了解如何应用它。

[1] how to remove elements from one list if other list contain the indexes of the elements to be removed

2 个答案:

答案 0 :(得分:4)

您可以使用list comprehensionenumerateconditional expression

>>> listA = [10, 12, 3, 8, 9, 17, 3, 7, 2, 8]
>>> listB = [1, 4, 8, 9]
>>>
>>> list(enumerate(listA))  # Just to demonstrate
[(0, 10), (1, 12), (2, 3), (3, 8), (4, 9), (5, 17), (6, 3), (7, 7), (8, 2), (9, 8)]
>>>
>>> listC = [0 if x in listB else y for x,y in enumerate(listA)]
>>> listC
[10, 0, 3, 8, 0, 17, 3, 7, 0, 0]
>>>

答案 1 :(得分:3)

作为列表理解:

listC = [value if index not in listB else 0 for index, value in enumerate(listA)]

使用set列表B可以大大改善大型列表:

setB = set(listB)
listC = [value if index not in setB else 0 for index, value in enumerate(listA)]

或者复制列表并对其进行修改,这既快又可读:

listC = listA[:]
for index in listB:
    listC[index] = 0