python - 替换 Python 列表中的选定元素

标签 python list list-comprehension slice

我有一个列表:mylist = [0, 0, 0, 0, 0]

我只想用一个公共(public)数字 A = 100 替换选定的元素,比如第一个、第二个和第四个。

一种方法:

mylist[:2] = [A]*2
mylist[3] = A
mylist
[100, 100, 0, 100, 0]

我正在寻找一种单线或更简单的方法来做到这一点。更一般和灵活的答案是可取的。

最佳答案

特别是因为您要替换 list 的相当大的 block ,所以我会一成不变地这样做:

mylist = [100 if i in (0, 1, 3) else e for i, e in enumerate(mylist)]

在 Python 中,创建一个新的 list 是一个单行代码,而改变一个 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)]

我个人可能会把它变成一个生成器,这样它就会产生一个迭代而不是返回一个列表,即使我永远不需要它,只是因为我那样笨。但如果您确实确实需要它:

myiter = (100 if i in (0, 1, 3) else e for i, e in enumerate(mylist))

或者:

def elements_replaced(lst, new_element, indices):
    for i, e in enumerate(lst):
        if i in indices:
            yield new_element
        else:
            yield e

关于python - 替换 Python 列表中的选定元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14350400/

相关文章:

python - 如何在 Python (psycopg2) 中获得 pg_dump -s <dbname> 的等价物?

python - 如何使用 python 删除循环列表的元素,直到只剩下一个元素?

列表理解中函数的 Pythonic 改进?

列表理解唯一值

python - 带有管理小部件的 Django ModelForm

python - 计算 numpy 矩阵中 true 的周围(python)

java - 为什么我不能访问我的静态列表中的数据?

java - 用于程序制作的 Big-O 运行时

python - 具有多个值到元组的字典

python - OpenCV - 应用霍夫线变换后裁剪图像