Ответ 1
>>> a= [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1]
>>> for n, i in enumerate(a):
... if i == 1:
... a[n] = 10
...
>>> a
[10, 2, 3, 4, 5, 10, 2, 3, 4, 5, 10]
Мне нужно выполнить поиск по списку и заменить все вхождения одного элемента на другой. Пока мои попытки кода не дают мне нигде, что это лучший способ сделать это?
Например, предположим, что мой список имеет следующие целые числа
>>> 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, 4, 5, 1, 2, 3, 4, 5, 1]
>>> for n, i in enumerate(a):
... if i == 1:
... a[n] = 10
...
>>> a
[10, 2, 3, 4, 5, 10, 2, 3, 4, 5, 10]
Попробуйте использовать список и тернарный оператор.
>>> 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]
Понимание списков работает хорошо, и циклическое выполнение с помощью перечисления может сэкономить вам память (поскольку операция по существу выполняется на месте).
Там также функциональное программирование. Смотрите использование карты:
>>> 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 != 4 else 'sss', a)
[1, 2, 3, 2, 3, 'sss', 3, 5, 6, 6, 5, 'sss', 5, 'sss', 3, 'sss', 3, 2, 1]
Если вам нужно заменить несколько значений, вы также можете использовать словарь:
a = [1, 2, 3, 4, 1, 5, 3, 2, 6, 1, 1]
dic = {1:10, 2:20, 3:'foo'}
print([dic.get(n, n) for n in a])
> [10, 20, 'foo', 4, 10, 5, 'foo', 20, 6, 10, 10]
>>> a=[1,2,3,4,5,1,2,3,4,5,1]
>>> item_to_replace = 1
>>> replacement_value = 6
>>> indices_to_replace = [i for i,x in enumerate(a) if x==item_to_replace]
>>> indices_to_replace
[0, 5, 10]
>>> for i in indices_to_replace:
... a[i] = replacement_value
...
>>> a
[6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6]
>>>
a = [1,2,3,4,5,1,2,3,4,5,1,12]
for i in range (len(a)):
if a[i]==2:
a[i]=123
Вы можете использовать цикл for и or while; однако если вы знаете встроенную функцию Enumerate, то рекомендуется использовать Enumerate. 1
Чтобы легко заменить все 1
на 10
в a = [1,2,3,4,5,1,2,3,4,5,1]
можно использовать комбинацию lambda + map и "Смотри, Ма, без IF или Форс! :
# This substitutes all '1' with '10' in list 'a' and places result in list 'c':
c = list(map(lambda b: b.replace("1","10"), a))
Ниже приведен очень прямой метод в Python 2.x
a = [1,2,3,4,5,1,2,3,4,5,1] #Replacing every 1 with 10
for i in xrange(len(a)):
if a[i] == 1:
a[i] = 10
print a
Этот метод работает. Комментарии приветствуются. Надеюсь, это поможет:)
Также попробуйте понять, как работают outis и решения damzam. Список компрессий и функция лямбда - полезные инструменты.
Вы можете просто использовать понимание списка в python:
def replace_element(YOUR_LIST, set_to=NEW_VALUE):
return [i
if SOME_CONDITION
else NEW_VALUE
for i in YOUR_LIST]
для вашего случая, когда вы хотите заменить все вхождения 1 на 10, фрагмент кода будет выглядеть так:
def replace_element(YOUR_LIST, set_to=10):
return [i
if i != 1 # keeps all elements not equal to one
else set_to # replaces 1 with 10
for i in YOUR_LIST]
Там действительно должен быть метод типа .replace()
для изменения списков. Это сделало бы понимание списка ненужным.
Я знаю, что это очень старый вопрос, и существует множество способов сделать это. Более простой, который я нашел, использует пакет numpy
.
import numpy
arr = numpy.asarray([1, 6, 1, 9, 8])
arr[ arr == 8 ] = 0 # change all occurrences of 8 by 0
print(arr)