在列表中查找和替换元素

419 投票
11 回答
1348179 浏览
提问于 2025-04-15 21:16

我需要在一个列表中查找,并把所有出现的一个元素替换成另一个元素。到目前为止,我在代码上的尝试都没有成功,最好的方法是什么呢?

举个例子,假设我的列表包含以下整数:

a = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1]

我需要把所有的数字1替换成10,所以我想要的输出是:

a = [10, 2, 3, 4, 5, 10, 2, 3, 4, 5, 10]

因此,我的目标是把所有的数字1都替换成数字10。

11 个回答

87

如果你有多个值需要替换,可以使用一个字典来实现:

a = [1, 2, 3, 4, 1, 5, 3, 2, 6, 1, 1]
replacements = {1:10, 2:20, 3:'foo'}
replacer = replacements.get  # For faster gets.

print([replacer(n, n) for n in a])

> [10, 20, 'foo', 4, 10, 5, 'foo', 20, 6, 10, 10]

需要注意的是,这种方法只适用于那些可以被哈希的元素。因为字典的键必须是可哈希的。

705

试着使用一种叫做 列表推导式 的方法,还有一种叫做 条件表达式 的东西。

>>> a=[1,2,3,1,3,2,1,1]
>>> [4 if x==1 else x for x in a]
[4, 2, 3, 4, 3, 2, 4, 4]
317

你可以使用内置的 enumerate 函数,在遍历列表的时候同时获取每个元素的索引和它的值。然后,你可以用这个值来检查某个条件,再用索引来替换原列表中的那个值:

>>> a = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1]
>>> for i, n in enumerate(a):
...   if n == 1:
...      a[i] = 10
...
>>> a
[10, 2, 3, 4, 5, 10, 2, 3, 4, 5, 10]

撰写回答