Python: Объединение списков – Слияние списков (8 способов)

В этом руководстве вы узнаете, как использовать Python для объединения списков, включая разные способы их объединения. Вы узнаете, например, как добавить один список к другому, объединить списки последовательно, объединить списки без дубликатов и многое другое.

Умение работать со списками в Python — невероятно важный навык. Списки в Python являются изменяемыми объектами, что означает их возможность изменяться. Они также могут содержать дублирующиеся значения и быть упорядочены различными способами. Поскольку списки в Python используются очень часто, умение манипулировать ими различными способами поможет продвинуться в вашей карьере Python

Оглавление

Объединение списков Python

Самый простой способ объединить списки Python — использовать либо распаковку списков, либо оператор

Давайте сначала рассмотрим использование оператора +, так как он синтаксически намного проще и легче для понимания. Посмотрим, как мы можем объединить два списка:

# Объединение двух списков
list1 = ['bemind.gitbook.io', 'is', 'a', 'site']
list2 = ['to', 'learn', 'python']

list3 = list1 + list2

print(list3)

# Возвращает: ['bemind.gitbook.io', 'is', 'a', 'site', 'to', 'learn', 'python']

Мы видим, что при печати третьего списка он объединяет первый и второй.

Аналогично, мы можем создать новый список, распаковав все элементы из списков, которые мы хотим объединить. Используя оператор *, мы можем получить доступ ко всем элементам обоих списков и распаковать их в третий.

Давайте посмотрим, как это будет выглядеть:

# Объединение двух списков
list1 = ['bemind.gitbook.io', 'is', 'a', 'site']
list2 = ['to', 'learn', 'python']

list3 = [*list1, *list2]

print(list3)

# Возвращает: ['bemind.gitbook.io', 'is', 'a', 'site', 'to', 'learn', 'python']

В следующем разделе вы узнаете, как объединить два списка в Python чередующимся образом, используя функцию zip() в Python.

Объедините списки Python, чередуя их с помощью Zip

Когда вы объединяете списки в Python, возможно, вы захотите добавлять элементы поочередно. Например, вы можете добавить первый элемент из обоих списков, затем второй элемент и так далее.

Для этого мы можем использовать функцию Python zip(). Функция zip выполняет поочередную итерацию по нескольким элементам, позволяя нам получать доступ к элементам по порядку.

Давайте посмотрим, как мы можем использовать функцию zip(), чтобы комбинировать списки Python поочередно:

# Объединение двух списков в чередующемся порядке
list1 = ['1a', '2a', '3a']
list2 = ['1b', '2b', '3b']

list3 = [item for sublist in zip(list1, list2) for item in sublist]

print(list3)

# Возвращает: ['1a', '1b', '2a', '2b', '3a', '3b']

Функция zip() создает zip-объект, который технически является объектом-генератором. Когда мы преобразуем его обратно в список, мы обращаемся ко всем элементам в генераторе. Благодаря этому мы можем использовать функцию для последовательного объединения двух списков Python.

Затем мы используем списковое включение для "разворачивания" объекта zip. Чтобы узнать больше о том, как это работает, ознакомьтесь с моим руководством по разворачиванию списка списков

В следующем разделе вы узнаете, как объединить два списка в Python без дубликатов.

Объедините списки Python без дубликатов

Списки в Python позволяют нам иметь в них повторяющиеся значения – это одно из свойств, которое делает их особенными.

Другой структурой данных в Python является множество, которое похоже на список, но не может содержать дублирующиеся элементы. Мы можем использовать множество, чтобы удалить дубликаты из списка, преобразовав список в множество. Чтобы узнать больше об удалении дубликатов из списка в Python, ознакомьтесь с моим руководством здесь.

Давайте посмотрим, как мы можем объединить наши списки и удалить все дубликаты, используя множество:

# Объединение списков Python без дубликатов

list1 = [1, 2, 3, 4]
list2 = [4, 5, 6, 7]

list3 = list(set(list1 + list2))

print(list3)

# Возвращает: [1, 2, 3, 4, 5, 6, 7]

Давайте изучим, что мы здесь сделали:

  1. Мы объединили наши списки с помощью оператора +

  2. Затем мы преобразовали этот список в множество, чтобы удалить дубликаты.

  3. Затем мы преобразовали набор обратно в список

В следующем разделе вы узнаете, как объединять массивы с помощью Python.

Объединение массивов Python

numpy, популярная библиотека Python для науки о данных, имеет структуру данных, похожую на список, называемую numpy arrays. Эти массивы имеют множество различных методов, которые облегчают работу с ними.

Один из этих методов - np.concatenate(), который, как следует из названия, объединяет два списка.

Давайте посмотрим, как мы можем использовать Python и numpy для этого:

# Конкатенация массивов в Python
import numpy as np

list1 = [1, 2, 3]
list2 = [4, 5, 6]

array1 = np.array(list1)
array2 = np.array(list2)

array3 = np.concatenate((array1, array2.T))

print(array3)

# Возвращает: [1 2 3 4 5 6]

Давайте рассмотрим, что мы сделали здесь:

  1. Мы преобразовали наши списки в массивы numpy

  2. Затем мы применили метод конкатенации к первому массиву и передали в него второй.

В следующем разделе вы узнаете, как объединять списки в Python, используя цикл for.

Объединение списков Python с помощью цикла For

В этом разделе вы научитесь использовать цикл for для добавления элементов из одного списка в другой. Хотя этот подход не всегда необходим, он дает гибкость в выборе включаемых элементов.

Например, используя цикл for, вы можете пропускать определенные элементы.

Давайте рассмотрим два примера: (1) где вы объединяете все элементы, и (2) где вы объединяете условно:

# Объединение двух списков Python с помощью цикла for
list1 = ['bemind.gitbook.io', 'is', 'a', 'site']
list2 = ['to', 'learn', 'python']

# Объединение всех элементов
for item in list2:
    list1.append(item)

print(list1)
# Возвращает: ['bemind.gitbook.io', 'is', 'a', 'site', 'to', 'learn', 'python']

# Условное объединение элементов
list1 = ['bemind.gitbook.io', 'is', 'a', 'site']
list2 = ['to', 'learn', 'python']
for item in list2:
    if len(item) > 3:
        list1.append(item)

print(list1)
# Возвращает: ['bemind.gitbook.io', 'is', 'a', 'site', 'learn', 'python']

Давайте рассмотрим, что мы сделали здесь в обоих примерах:

  1. Мы перебрали наш второй список и добавили каждый элемент в наш первый список

  2. В условном примере мы проверили условие. Если условие выполнено, то добавляем элемент в список. Если нет, то элемент пропускается.

В следующем разделе вы узнаете, как использовать генераторы списков в Python для объединения списков.

Объединение списков Python с пониманием списков

Мы также можем использовать для объединения двух списков в Python списковое включение. Этот метод использует списковое включение несколько необычно: мы используем его только для перебора списка и добавления элементов в другой список.

Давайте посмотрим, как это выглядит:

# Объединение двух списков Python с помощью спискового включения
list1 = ['bemind.gitbook.io', 'is', 'a', 'site']
list2 = ['to', 'learn', 'python']

[list1.append(item) for item in list2]

print(list1)
# Возвращает: ['bemind.gitbook.io', 'is', 'a', 'site', 'to', 'learn', 'python']

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

В следующем разделе вы узнаете, как объединять списки Python, оставляя только общие элементы.

Объедините списки Python с общими элементами

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

Подход, показанный ниже, использует sets для создания уникальных элементов в списках. В приведённом выше руководстве показаны различные подходы для достижения этой цели.

Давайте рассмотрим, как объединить списки, оставив только общие элементы:

# Объединение общих элементов между двумя списками

list1 = [1, 2, 3, 4]
list2 = [3, 4, 5, 6]

list3 = list(set(list1).intersection(set(list2)))
print(list3)

# Возвращает: [3, 4]

Давайте исследуем, что мы здесь сделали:

  1. Оба списка преобразованы в множества

  2. Первый набор использует метод .intersection() и передает второй в качестве аргумента

  3. Последний набор возвращается в виде списка

В следующем разделе вы узнаете, как объединить два списка, используя только уникальные элементы из обоих списков.

Объедините списки Python только с уникальными элементами

Вам может понадобиться объединить два списка и сохранить только уникальные элементы из обоих списков.

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

Давайте посмотрим, как мы можем сделать это на Python, а затем углубимся в то, как это работает:

# Объединение уникальных элементов между двумя списками

list1 = [1, 2, 3, 4]
list2 = [3, 4, 5, 6]

common_elements = list(set(list1).intersection(set(list2)))
combined = list1 + list2

for item in common_elements:
    combined = [element for element in combined if element != item]

print(combined)
# Возвращает: [1, 2, 5, 6]

Давайте посмотрим, что мы сделали здесь:

  1. Мы нашли пересечение двух списков и создали список, названный common_elements

  2. Затем мы объединили наши два списка в список под названием combined

  3. Затем мы прошлись по списку общих элементов

  4. Для каждого элемента мы выполняли генератор списков, который перебирал общие элементы и исключал их из объединенного списка.

Причина, по которой мы используем списковую генерацию, заключается в том, что она позволяет нам проверять наличие дубликатов. Если бы мы просто использовали метод, такой как .remove(), то был бы удален только первый экземпляр.

Заключение

В этом посте вы узнали, как использовать Python для объединения двух списков. Вы узнали, как делать это, просто объединяя два списка по порядку. Также вы узнали, как объединять списки в чередующейся последовательности и без дубликатов. Вы узнали, как использовать циклы for и включения списков для объединения списков Python. Наконец, вы узнали, как объединять списки, включающие только общие элементы и только уникальные элементы.

Чтобы узнать больше о структуре данных списка в Python, ознакомьтесь с официальной документацией здесь.

Last updated