← Все вопросы

Как найти пересечение двух списков (общие элементы)?

Задан 1 месяц назад521 просмотров2 ответа
9

Есть два списка, хочу получить элементы, которые есть в обоих. Сейчас делаю двойным циклом, но кажется, есть способ лучше.

2 ответа

20
✓ Принятый ответ — помог автору

Через множества — быстро и кратко:

a = [1, 2, 3, 4]
b = [3, 4, 5]
common = list(set(a) & set(b))
# [3, 4]  (порядок не гарантирован)

Важные оговорки: множества теряют порядок и убирают дубликаты. Если нужно сохранить порядок как в первом списке и не плодить дубли — так:

bset = set(b)
common = [x for x in a if x in bset]

Здесь x in bset — это O(1), поэтому общая сложность O(n), а не O(n²) как у двойного цикла.

Снежана Лебедева Вариант с сохранением порядка — то, что искал, спасибо · 26 дней назад
5

set(a) & set(b).

Андрей Галиуллин Если порядок и дубликаты не важны — самое то · 27 дней назад

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект