2016-02-28 2 views
-1

Мне нужно найти элементы списка в другом списке.индекс возврата в списке в соответствии с другим списком, python

, например:

a = ['s','u','v'] 
b = ['u','s','a'] 

Я хотел бы получить в результате булево массив (или список), который указывает для каждого элемента а, если этот элемент существует в б. так что для этого примера я хотел бы получить:

[1,1,0] 

Благодаря

+0

Просьба представить [mvce] (HTTP://stackoverflow.com/help/mcve) – ffledgling

ответ

5

В списке понимание:

>>> a = ['s', 'u', 'v'] 
>>> b = ['u', 's', 'a'] 
>>> [i in b for i in a] 
[True, True, False] 
>>> [int(i in b) for i in a] 
[1, 1, 0] 

Наиболее важной операцией является i in b, которая возвращает существует ли элемент i в коллекции b. Для получения информации о списках, прочитайте here.

Это также показывает, что True == 1 и False == 0. bool фактически является подклассом int. Если они не , то необходимо быть int s, сохраняя их как True и False будет быстрее.

Это было бы намного более эффективно, если бы b были set, которые вы можете захотеть сделать в зависимости от размера b. Это можно сделать только с set(b).

0

Это работает, это список понимание:

# a = ['s','u','v'] 
# b = ['u','s','a'] 

[(0,1)[e in b] for e in a] 

# [1, 1, 0] ... 
-3
a = ['s','u','v'] 
b = ['u','s','a'] 

print ([int(t) for t in [x in b for x in a]]) 

Выходной;

[1, 1, 0] 
>>> 

Б списочных и оказались булевыми значения в целом WITN int() так True == 1 и False == 0.

+0

Пожалуйста, объясните, как ваше решение работает и почему это лучше, чем другие решения. – Koopakiller

+0

@ Koopakiller Я сделал его одним слоем. Я сейчас объясню – grambel

0

Используя условие в списке понимание вы могли бы получить то, что вы хотите:

a = ['s','u','v'] 
b = ['u','s','a'] 
[1 if i in b else 0 for i in a] 
0

Если вы хотите нули и единицы вместо логических значений:

>>> [1 if i in b else 0 for i in a] 
[1, 1, 0] 
Смежные вопросы