Замена в списках по ключ.словам python
Час добрый. Подскажите пожалуйста как можно переделать код, который оставлю ниже, для замены не всех одинаковых элементов выбранных по ключу, а только, скажем второй
import random
list1 = ['пример', 'пример', '♥♥♥', 'пример', '♥♥']
list2 = ['1', '2', '3', '4', '5', '6', 'текст']
replace = 'пример'
unique2 = sorted(set(list2))
random.shuffle(unique2)
for j, i in enumerate([i for i, e in enumerate(list1) if e == replace]):
list1[i] = unique2[j % len(unique2)]
print(list1)
То есть чтобы на выходе получить list1 = ['пример', '2','♥♥♥', 'пример', '♥♥'] А не заменить все ключ.слова 'пример' на слова из списка 2
Ответы (2 шт):
Автор решения: strawdog
→ Ссылка
Ну вот ради эксперимента с itertools:
import itertools
counter = itertools.count(1)
list1 = ['пример', 'пример', '♥♥♥', 'пример', '♥♥']
list2 = ['1', '2', '3', '4', '5', '6', 'текст']
replace = ("пример", 3) #что заменять и какое по счету вхождение
tmp = [(next(counter), x) if x==replace[0] else (0, x) for x in list1 ]
res = [x[1] if x[0]!=replace[1] else list2[replace[1]-1] for x in tmp]
res:
['пример', 'пример', '♥♥♥', '3', '♥♥']
Автор решения: SergFSM
→ Ссылка
немного изменил ваш код (добавил условие), теперь можно указать элементы на каких позициях нужно заменить:
import random
list1 = ['пример', 'пример', '♥♥♥', 'пример', '♥♥']
list2 = ['1', '2', '3', '4', '5', '6', 'текст']
replace_text = 'пример'
replace_pos = [1,2] # порядковые номера элементов которые надо заменить
unique2 = sorted(set(list2))
random.shuffle(unique2)
for j, i in enumerate([i for i, e in enumerate(list1) if e == replace_text]):
if j+1 in replace_pos: list1[i] = unique2[j % len(unique2)]
print(list1) # ['5', '6', '♥♥♥', 'пример', '♥♥']