Как копировать значение из списка в другой с заменой?
Создаю список:
a =[1,1,1,2,2,2,3,3,4,5,5,5,6,6,6,7,7,8,8,8,8,9,9,10,10,
1,1,1,2,3,3,3,4,4,5,6,7,8,9,9,9,10,10]
длинной 43. Затем создаю этой же длинны список list = [0] * 43 с нулями.
Есть два других списка oa и ab.
oa = [4.0, 5.0, 8.0]
ob = [2.0, 3.0, 10.0]
Если в oa есть значение 4 и оно есть в списке а, то напротив 4 в списке a ставим 1 в списке list.
Если в ob есть значение 3 и оно есть в списке а, то напротив 3 в списке a ставим 2 в списке list.
Тоесть для oa соответсвующее значение 1, для ob оно 2.
Как в итоге получить такой список:
a = [0,0,0,2,2,2,2,2,1,1,1,1,0,0,0,0,0,1,1,1,1,
0,0,2,2,0,0,0,2,2,2,2,1,1,1,0,0,1,0,0,0,2,2]
Ответы (2 шт):
Автор решения: MaxU
→ Ссылка
Воспользуйтесь Numpy:
import numpy as np
res = np.zeros_like(a)
res[np.isin(a, oa)] = 1
res[np.isin(a, ob)] = 2
результат:
In [150]: res
Out[150]:
array([0, 0, 0, 2, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0,
0, 2, 2, 0, 0, 0, 2, 2, 2, 2, 1, 1, 1, 0, 0, 1, 0, 0, 0, 2, 2])
Автор решения: CrazyElf
→ Ссылка
Как вариант - чистый питон с двойным тернарным оператором и списковым сокращением:
a = [1,1,1,2,2,2,3,3,4,5,5,5,6,6,6,7,7,8,8,8,8,9,9,10,10,1,1,1,2,3,3,3,4,4,5,6,7,8,9,9,9,10,10]
oa = [4.0, 5.0, 8.0]
ob = [2.0, 3.0, 10.0]
b = [1 if i in oa else 2 if i in ob else 0 for i in a]
print(b)
Вывод:
[0, 0, 0, 2, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0,
0, 2, 2, 0, 0, 0, 2, 2, 2, 2, 1, 1, 1, 0, 0, 1, 0, 0, 0, 2, 2]