Как, не зная индекс, заменить произвольные элементы списка?
Одна из задач на обучающем курсе. Дан список:
lst = ['Anthony', 'is', 'complete', 'bastard.]
Требуется заменить элементы 'bastard.' на 'badass.' и вывести всё это дело. Конечно, на ум приходит что-то вроде:
lst[3] = 'badass'
print(lst)
Но что делать в том случае, если мне неизвестен индекс необходимой строки? Можно ли осуществить замену необходимых строк, если известно лишь их содержание?
Ответы (3 шт):
Автор решения: eri
→ Ссылка
Пройти по массиву целиком
lst = ['Anthony', 'is', 'complete', 'bastard']
lst = list(map(lambda x: 'badass' if x=='bastard' else x, lst ))
print(lst)
или поискать индексы
lst = ['Anthony', 'is', 'complete', 'bastard']
index = 0
while True:
try:
index = lst.index('bastard', index)
except ValueError:
break
lst[index] = 'badass'
print(lst)
или списковые включение
lst = ['Anthony', 'is', 'complete', 'bastard']
lst = [('badass' if x=='bastard' else x) for x in lst ]
print(lst)
Автор решения: Sotnikov
→ Ссылка
Можно сделать это с помощью метода index, он возвращает индекс по указаному значению
То есть примерно так:
lst = ['Anthony', 'is', 'complete', 'bastard']
lst[lst.index('bastard')] = 'new_value'
В итоге у нас будет новый список с изменённым значением
Автор решения: Danis
→ Ссылка
def replace(iterable, old, new, count=-1):
if not isinstance(count, int):
type_name = count.__class__.__name__
msg = f'integer argument expected, got {type_name}'
raise TypeError(msg)
iterable = iter(iterable)
for el in iterable:
if count == 0:
break
if el == old:
count -= 1
yield new
else:
yield el
yield from iterable
