Как заменить все единицы в массиве на двойки?
Как заменить все единицы в массиве на двойки?
Надо из этого a = [1, 5, 1, 6] сделать это a = [2, 5, 2, 6].
Ответы (4 шт):
Например, через цикл пройтись по элементам и заменить:
a = [1, 5, 1, 6]
count = 0
for i in a:
if i == 1:
a[count] = 2
count += 1
print(a)
Можно через генератор:
a = [1, 5, 1, 6]
a = [int(str(x).replace('1', '2')) for x in a]
print(a)
Вывод:
[2, 5, 2, 6]
Используйте списковое включение и тернарный оператор:
a = [1, 5, 1, 6]
a = [2 if x == 1 else x for x in a]
Скорее всего вы имели в виду немного не то, что написали, и вариант со списковым включением вам действительно подходит. Но все-таки, в образовательных целях полезно будет сказать, что использование спискового включения создаст новый объект списка, а не заменит значения в старом. Если понимать ваш вопрос буквально, и вы хотите именно заменить значения в изначальном объекте, то ответ будет примерно такой:
a = [1, 5, 1, 6]
for i, value in enumerate(a):
if value == 1:
a[i] = 2
print(a) # [2, 5, 2, 6]
Использование встроенной функции enumerate позволяет в каждой итерации цикла получать не только значение из итерируемого объекта, но и его индекс. Это удобнее, чем использовать счетчик.
На практике лучше так, конечно, не делать, т.к. изменять объект, по которому итерируешься - это в 99% зло.
про очевидные способы уже написали, добавлю еще один не вполне очевидный:
import pandas as pd
a = [1, 5, 1, 6]
# заменяем все 1 на "а", 5 на "b", 6 на "c"
a = pd.Series(a).replace({1:'a',5:'b',6:'c'}).to_list()
print(a) # ['a', 'b', 'a', 'c']