Как сравнить каждый элемент из двух списков в Python - PullRequest
0 голосов
/ 01 октября 2018

Я ищу оператор Python, похожий на% в% в R. Он сравнивает все элементы в списке со всеми элементами в другом списке и возвращает логический массив.Это будет делать следующее:

a=['word1','word2','word3','word4']
b=['word2','word4']
a *%in%* b
>>False True False True

Ближайшая вещь, которую я нашел, это pd.str.contains, но она не векторизована, то есть она ищет только один элемент.Надеюсь, кто-нибудь знает.

Ответы [ 3 ]

0 голосов
/ 01 октября 2018

Поскольку python не является в основном числовым или научным языком, он не поставляется с некоторыми вещами, которые доступны по умолчанию в matlab или R. При этом практически все, что вам нужно от этих языков, доступно в numpy./ scipy экосистема.Например, numpy имеет функцию in1d:

import numpy
a = ['word1','word2','word3','word4']
b = ['word2','word4']

print(numpy.in1d(a, b))
# [False  True False  True]
0 голосов
/ 01 октября 2018

Используя список понимания , мы можем проверить, находится ли элемент в list сравнения и вернуть True, если это так, иначе False

l = [*True if i in b else False for i in a]
print(*l)
False True False True

Расширенная петля

l = []
for i in a:
    if i in b:
        l.append(True)
    else:
        l.append(False)
0 голосов
/ 01 октября 2018

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

[item in b for item in a]

Это создает новый список способом, подобным следующему коду:

newList = []
for item in a:
    newList.append(item in b)

, где item in b оценивается как True, если item существует в b, в противном случае он оценивается как False.


Как упоминалось в комментариях (спасибо Пол Руни !), скорость этого можно улучшить, есливы превращаете b в набор:

b_set = set(b)
result = [item in b_set for item in a]

Это потому, что операция поиска item in b занимает согласованное время, если b является набором, тогда как каждый отдельный элемент должен сравниваться до совпаденияобнаруживается, если b является списком.

Улучшение скорости не очень заметно, если b мало, но для списка b, содержащего сотни элементов, это может быть значительным улучшением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...