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

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])

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

3
Ewdlam 7 Фев 2020 в 12:55

2 ответа

Лучший ответ

Для понимания списка используется троичный оператор:

>>> 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])
2
CDJB 7 Фев 2020 в 09:58

Вы можете использовать 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
Mihai Alexandru-Ionut 7 Фев 2020 в 10:23