我希望从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
答案 0 :(得分:4)
您可以使用list comprehension,enumerate
和conditional 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