Изменить значения массива, где список того же размера содержит значения другого списка - PullRequest
3 голосов
/ 07 февраля 2020

У меня есть два списка:

List_large = ['a','b','c','d']
List_small = ['a','c']

И этот массив:

check = np.array([0]*len(List_large))
check
Out : array([0, 0, 0, 0])

Я хотел бы иметь 1 в массиве "check" в позициях List_large, имеющих значения List_small. Следовательно, я хотел бы, наконец, иметь этот массив:

array([1, 0, 1, 0])

Как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 07 февраля 2020

Вы можете использовать метод np.isin.

result = np.isin(List_large, List_small).astype(int)

Если ваша версия numpy меньше 1.13.0, используйте метод in1d.

result = np.in1d(List_large, List_small).astype(int)

Поскольку метод result = np.in1d(List_large, List_small) возвращает numpy array из логических значений, необходимо использовать метод astype, чтобы получить список из двоичных значений, 0 и 1.

Выход

array([1, 0, 1, 0])
2 голосов
/ 07 февраля 2020

В качестве списка-списка используется троичный оператор :

>>> List_large = ['a','b','c','d']
>>> List_small = ['a','c']
>>> np.array([1 if c in List_small else 0 for c in List_large])
array([1, 0, 1, 0])
...