我希望,这是一个不太难的问题,来自于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看起来很相似,但要求删除元素,而不是更改元素。我不确定是否需要类似的方法,但如果需要,我不知道如何应用它。
发布于 2014-04-30 18:58:30
作为一种清单理解:
listC = [value if index not in listB else 0 for index, value in enumerate(listA)]对于大型列表,可以使用set对listB进行大幅度的改进:
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发布于 2014-04-30 18:57:35
>>> 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]
>>>https://stackoverflow.com/questions/23395945
复制相似问题