Создать массив из двух списков и заменить повторяющие в первом
Есть два массива
a = [123, 231, 123, 231, 123, 123, 231, 231]
b = [100, 123, 200, 231, 300, 231, 123]
В первом массиве повторяющие элементы. А во втором некоторые элементы их повторяют. Мне нужно во втором массиве заменить элементы которые повторяются с первым массивом заменить на другое значение, например на "0". То есть результат должен быть таким:
b = [100, 0, 200, 0, 300, 0, 0]
Я пробовал так:
a = IN[0]
b = IN[1]
for i in a:
for j in b:
if i==j:
b[j]=0
Ответы (2 шт):
j -- значение текущего элемента в цикле, а не его индекс. Обращаясь к элементу как b[j], вы пытаетесь обратиться при первом же совпадении к элементу с индексом, выходящим за пределы массива.
Лучше перебирать индексы через range(len()) :
a = [123, 231, 123, 231, 123, 123, 231, 231]
b = [100, 123, 200, 231, 300, 231, 123]
for i in range(len(a)):
for j in range(len(b)):
if a[i]==b[j]:
b[j] = 0
print(b)
Простой способ получить нужный результат - использовать списковое включение, тогда получится новый список с требуемым содержимым.
out = [0 if el in a else el for el in b]
Если требуется модифицировать именно старый список, не создавая новый, удобно использовать enumerate()
for i,el in enumerate(b):
if el in a:
b[i]=0
print(b)
[100, 0, 200, 0, 300, 0, 0]
Дополнительно. Если список a большой, то существенно сократить время на поиск элементов в нем можно за счет формирования множества (set) из списка и последующего определения наличия элемента уже в нем:
set_a = set(a)
out = [0 if el in set_a else el for el in b]