用Python替换列表中的选定元素

elw*_*lwc 7 python list-comprehension list slice

我有一个清单: mylist = [0, 0, 0, 0, 0]

我只想用一个公共数字替换所选元素,比如第一个,第二个和第四个A = 100.

一种方法:

mylist[:2] = [A]*2
mylist[3] = A
mylist
[100, 100, 0, 100, 0]
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个单行或更简单的方法来做到这一点.更通用和灵活的答案是更可取的.

aba*_*ert 8

特别是因为你正在替换相当大的一部分list,我会不可改变地做到这一点:

mylist = [100 if i in (0, 1, 3) else e for i, e in enumerate(mylist)]
Run Code Online (Sandbox Code Playgroud)

在Python中故意制作一个新的list是单行,而变异a list需要一个显式的循环.通常,如果你不知道你想要哪一个,你想要新的list.(在某些情况下,它更慢或更复杂,或者你有一些其他代码具有相同的参考list,需要看到它变异,或者其他什么,这就是为什么它"通常"而不是"总是".)

如果你想不止一次这样做,我会把它包装成一个函数,正如Volatility建议的那样:

def elements_replaced(lst, new_element, indices):
    return [new_element if i in indices else e for i, e in enumerate(lst)]
Run Code Online (Sandbox Code Playgroud)

我个人可能会把它变成一个生成器,所以它产生一个迭代,而不是返回一个列表,即使我永远不会需要它,只是因为我这样愚蠢.但是,如果你真的这样做需要它:

myiter = (100 if i in (0, 1, 3) else e for i, e in enumerate(mylist))
Run Code Online (Sandbox Code Playgroud)

要么:

def elements_replaced(lst, new_element, indices):
    for i, e in enumerate(lst):
        if i in indices:
            yield new_element
        else:
            yield e
Run Code Online (Sandbox Code Playgroud)