首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据作为索引的第二个列表更新列表元素

问根据作为索引的第二个列表更新列表元素
EN

Stack Overflow用户
提问于 2014-04-30 18:56:01
回答 2查看 547关注 0票数 2

我希望,这是一个不太难的问题,来自于Python的初学者。

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

因此,例如,鉴于:

代码语言:javascript
复制
listA = [10, 12, 3, 8, 9, 17, 3, 7, 2, 8]
listB = [1, 4, 8, 9]

我想要的输出是

代码语言:javascript
复制
listC = [10, 0, 3, 8, 0, 17, 3, 7, 0, 0]

这个问题1看起来很相似,但要求删除元素,而不是更改元素。我不确定是否需要类似的方法,但如果需要,我不知道如何应用它。

1

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-30 18:58:30

作为一种清单理解:

代码语言:javascript
复制
listC = [value if index not in listB else 0 for index, value in enumerate(listA)]

对于大型列表,可以使用set对listB进行大幅度的改进:

代码语言:javascript
复制
setB = set(listB)
listC = [value if index not in setB else 0 for index, value in enumerate(listA)]

或者复制列表并修改它,这样既快又易读:

代码语言:javascript
复制
listC = listA[:]
for index in listB:
    listC[index] = 0
票数 3
EN

Stack Overflow用户

发布于 2014-04-30 18:57:35

您可以使用列表理解、enumerate和条件表达式

代码语言:javascript
复制
>>> 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]
>>>
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23395945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档