Как мы можем добиться логической операции AND (пересечение списков) для двух списков?
Переведено автоматически
Ответ 1
Если порядок не важен и вам не нужно беспокоиться о дубликатах, вы можете использовать set intersection:
>>> a = [1,2,3,4,5] >>> b = [1,3,5,6] >>> list(set(a) & set(b)) [1, 3, 5]
Ответ 2
Использование понимания списков для меня довольно очевидно. Не уверен насчет производительности, но, по крайней мере, все остается в списках.
[x for x in a if x in b]
Или "все значения x, которые находятся в A, если значение X находится в B".
Ответ 3
Если вы преобразуете больший из двух списков в набор, вы можете получить пересечение этого набора с любым итерируемым с помощью intersection():
a = [1,2,3,4,5] b = [1,3,5,6] set(a).intersection(b)
Ответ 4
Создайте набор из большего списка:
_auxset = set(a)
Тогда,
c = [x for x in b if x in _auxset]
будет делать то, что вы хотите (сохраняя bпорядок, а не a's - не обязательно сохранять оба) и делать это быстро. (Использование if x in a в качестве условия понимания списка также сработало бы и избавило бы от необходимости построения _auxset, но, к сожалению, для списков значительной длины это было бы намного медленнее).
Если вы хотите, чтобы результат был отсортирован, а не сохранялся порядок в обоих списках, еще более аккуратным способом может быть: