在多个索引处替换列表中的值

Substitute values in a list at multiple indices

假设我有列表:

mylist = [0] * 46

我想为列表中的每个索引设置mylist[i] = 1

indices_list = [0, 30, 40, 41]

现在,我正在使用一个简单易读的 for 循环,因为在 Python 中您不能使用索引列表作为列表中的索引(即 mylist[indices_list] = 1无效 Python 代码):

for i in indices_list:
    mylist[i] = 1

而且效果很好。但是,有人告诉我最好使用列表推导式。这是真的?如果是这样,我该怎么做,我的简单 for 循环有什么优势?

你所做的绝对没问题,但如果你正在寻找一个列表理解解决方案,下面将起作用(但效率低于你已有的):

>>> [1 if i in indices_list else v for i,v in enumerate(mylist)]
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0]

不,不是更好。列表理解 always 创建一个新的列表对象。这意味着它必须处理 46 中的每个元素!对只有 4 个索引的列表进行简单循环就可以了!

Lots of resources 围绕这个问题指向“在一天结束时,循环是好的”的方向。我不 喜欢 尝试导入和利用库的解决方案(即 numpypandas),因为创建这些对象需要付出代价。如果您已经在处理这些对象,这显然是很自然的事情,但如果您需要创建一个对象只是为了利用特定方法并避免简单循环,那么可能并不总是值得的。