Случайная замена одинаковых элементов списка Python
Час добрый. Подскажите пожалуйста как можно заменить определенные одинаковые элементы в списке на разные элементы из другого списка. То есть имеется два списка
список 1 = ['пример', 'пример', '♥♥♥', 'пример', '♥♥']
список 2 = ['1', '2', '3', '4', '5', '6', 'текст']
И после обработки списка 1 по ключевому слову 'пример', нужно получить новый список, в котором не будут повторятся переменные из списка 2. Выходные данные должны быть примерно такими
список 1 после обработки = ['1', '6', '♥♥♥', 'текст', '♥♥']
Пробовал код по типу того что оставлю ниже, но он заменяет все ключевые слова на одну и ту же переменную
for word in text_model_split:
s = word
l = s
with open('short.txt', 'r', encoding='utf-8') as file_short:
for line in file_short:
line = line.split('\n')
short_list.append(line[0])
random_element = random.choice(short_list)
l = [i.replace('пример', f'{random_element}') for i in l]
l = (''.join(l))
Ответы (3 шт):
import random
arr1 = ['пример', 'пример', '♥♥♥', 'пример', '♥♥']
arr2 = ['1', '2', '3', '4', '5', '6', 'текст']
res = []
x = []
for el in arr1:
if el not in x and arr1.count(el) > 1:
x.append(el)
for i in range(len(arr1)):
if arr1[i] not in x:
res.append(arr1[i])
else:
n = random.randrange(len(arr2))
res.append(arr2[n])
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)
Вывод:
['4', 'текст', '♥♥♥', '2', '♥♥']
еще один похожий вариант, с использованием встроенной функции iter():
from random import shuffle
list1 = ['пример', 'пример', '♥♥♥', 'пример', '♥♥']
list2 = ['1', '2', '3', '4', '5', '6', 'текст']
replace = 'пример'
shuffle(list2)
shuf = iter(set(list2))
list1 = [next(shuf) if i==replace else i for i in list1]
print(list1) # ['текст', '3', '♥♥♥', '1', '♥♥']
UPD
только сейчас сообразил, что код выдаст ошибку после исчерпания итератора, то есть list2 должен быть длиннее чем количество одинаковых элементов в list1