Мне приходится выполнять поиск по списку и заменять все вхождения одного элемента другим. Пока мои попытки в коде ни к чему не приводят, как лучше всего это сделать?
Например, предположим, что мой список содержит следующие целые числа
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.
>>> a=[1,2,3,1,3,2,1,1] >>> [4if x==1else x for x in a] [4, 2, 3, 4, 3, 2, 4, 4]
Ответ 2
Вы можете использовать встроенную функцию enumerate для получения как индекса, так и значения при повторении списка. Затем используйте значение для проверки условия, а индекс - для замены этого значения в исходном списке:
>>> a = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1] >>> for i, n inenumerate(a): ... if n == 1: ... a[i] = 10 ... >>> a [10, 2, 3, 4, 5, 10, 2, 3, 4, 5, 10]
Ответ 3
Если у вас есть несколько значений для замены, вы также можете использовать словарь:
Обратите внимание, что этот подход работает, только если элементы, подлежащие замене, являются хэшируемыми. Это связано с тем, что ключи dict должны быть хэшируемыми.
Ответ 4
Понимание списка работает хорошо, и выполнение цикла с помощью enumerate может сэкономить вам немного памяти (поскольку операция, по сути, выполняется на месте).
Существует также функциональное программирование. Смотрите использование map:
>>> a = [1,2,3,2,3,4,3,5,6,6,5,4,5,4,3,4,3,2,1] >>> map(lambda x: x if x != 4else'sss', a) [1, 2, 3, 2, 3, 'sss', 3, 5, 6, 6, 5, 'sss', 5, 'sss', 3, 'sss', 3, 2, 1]