← Все вопросы
Как найти пересечение двух списков (общие элементы)?
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 дней назад
Ваш ответ
Войдите, чтобы ответить на вопрос.