在列表中查找和替换元素
我需要在一个列表中查找,并把所有出现的一个元素替换成另一个元素。到目前为止,我在代码上的尝试都没有成功,最好的方法是什么呢?
举个例子,假设我的列表包含以下整数:
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]
需要注意的是,这种方法只适用于那些可以被哈希的元素。因为字典的键必须是可哈希的。
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]