Top.Mail.Ru
Публичное облако на базе VMware с управлением через vCloud Director
Вход / Регистрация

Как объединить списки в Python: 6 способов

1056
7 минут чтения
Средний рейтинг статьи: 4

В Python доступно множество типов данных для хранения информации и манипуляции ею. Списки, кортежи, наборы и словари являются одними из наиболее часто используемых.

Список — это неупорядоченная коллекция данных, которая не может содержать повторяющихся элементов. Кортеж, с другой стороны, также является упорядоченной коллекцией, но его порядок нельзя изменить. Словари, аналогичные наборам, организованы парами ключ-значение, что позволяет эффективно извлекать определенные значения на основе соответствующих им ключей.

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

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

Как запускать примеры из этого руководства

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

  1. Создайте файл, например, main.py, используя любой текстовый редактор.
  2. Вставьте код из примера в созданный файл и сохраните его.
  3. Откройте командную строку (Windows) или терминал (Linux/macOS) и перейдите в директорию, где находится ваш файл, с помощью команды cd C:\Users\, где C:\Users — название директории.
  4. Выполните команду python main.py или python3 main.py для запуска вашего скрипта.
  5. Результат выполнения программы будет выведен в консоли.

Способ 1. Оператор +

Оператор +  может использоваться для объединения двух списков в Python. Он добавляет один список в конец другого списка и в результате получается новый список. 

Пример:

  
a1 = [1, 12, 5, 49, 56] a2 = [27, 36, 42] list= a1 + a2 print(list)

Результат выполнения:

  
[1, 12, 5, 49, 56, 27, 36, 42]

Рассмотрим другой случай, в котором генерируется три списка случайных чисел, а после они объединяются в один.

  
import random def generate_and_combine_lists(length): if length <= 0: raise ValueError("Длина списка должна быть положительным числом") list1 = [random.randint(1, 10) for _ in range(length)] list2 = [random.randint(1, 100) for _ in range(length)] list3 = [random.randint(1, 1000) for _ in range(length)] try: combined_list = list1 + list2 + list3 return list1, list2, list3, combined_list except TypeError as e: print(f"Ошибка при объединении списков: {e}") return None list_length = 5 list1, list2, list3, combined_list = generate_and_combine_lists(list_length) if combined_list: print(f"Список 1: {list1}") print(f"Список 2: {list2}") print(f"Список 3: {list3}") print(f"Объединенный список: {combined_list}")

Результат выполнения программы будет выведен в консоли. В нашем случае он будет следующим:

  
Список 1: [4, 7, 3, 2, 10] Список 2: [43, 73, 5, 61, 39] Список 3: [500, 315, 935, 980, 224] Объединенный список: [4, 7, 3, 2, 10, 43, 73, 5, 61, 39, 500, 315, 935, 980, 224]

VDS и VPS

Гибкие виртуальные серверы с почасовым
биллингом по всему миру: Россия, Азия и Европа

Способ 2. Оператор *

С помощью оператора * можно легко объединить списки в Python. Оператор * распаковывает коллекцию элементов по аргументам индекса.

Например, рассмотрим список list1 = [1, 12, 5, 49, 56] и list2 = [27, 36, 42].

Оператор * заменит список его элементами в позициях index. Таким образом, он распаковывает элементы списков.

Пример:

  
list1 = [1, 12, 5, 49, 56] list2 = [27, 36, 42] list = [*list1, *list2] print(str(list))

Вывод:

  
[1, 12, 5, 49, 56, 27, 36, 42]

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

  
import random def generate_and_combine_lists(length): if length <= 0: raise ValueError("Длина списка должна быть положительным числом") list1 = [random.randint(1, 100) for _ in range(length)] list2 = [random.randint(1, 100) for _ in range(length)] list3 = [random.randint(1, 100) for _ in range(length)] return list1, list2, list3, *list1, *list2, *list3 list_length = 5 list1, list2, list3, *combined_list = generate_and_combine_lists(list_length) print(f"Список 1: {list1}") print(f"Список 2: {list2}") print(f"Список 3: {list3}") print(f"Объединенный список: {combined_list}")

Результат:

  
Список 1: [10, 43, 17, 74, 99] Список 2: [65, 91, 56, 37, 37] Список 3: [33, 39, 87, 27, 82] Объединенный список: [10, 43, 17, 74, 99, 65, 91, 56, 37, 37, 33, 39, 87, 27, 82]

Способ 3. Цикл for

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

  
list1 = [6, 11, 32, 71, 3] list2 = [18, 54, 42] print(str(list1)) for x in list2: list1.append(x) print(str(list1))

Вывод:

  
[6, 11, 32, 71, 3] [6, 11, 32, 71, 3, 18, 54, 42]

Способ 4. Генератор списка

Генератор списка использует цикл for. Генератор списка — это функция, которая создает новый список на основе переданного аргумента. Генераторы списков используются для создания списков, заполненных по сложным формулам. Общий вид генератора следующий:

  
list1 = [5, 73, 232, 1, 8, 19] list2 = [84, 56, 7, 10, 20, 30] list = [j for i in [list1, list2] for j in i] print (str(list))

Вывод:

  
[5, 73, 232, 1, 8, 19, 84, 56, 7, 10, 20, 30]

Способ 5. Метод extend()

Метод extend() Python может использоваться для объединения двух списков в Python. Функция extend() выполняет итерацию по переданному параметру и добавляет элемент в список, таким образом, расширяя его линейно.

  
import random list1 = [random.randint(10, 20) for _ in range(5)] list2 = [random.randint(20, 50) for _ in range(3)] print("Первый список:", str(list1)) list1.extend(list2) print("Объединенный список:", str(list1))

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

  
Первый список: [19, 19, 16, 17, 16] Объединенный список: [19, 19, 16, 17, 16, 47, 21, 31]

Способ 6. Метод itertools.chain() 

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

Функцию itertools.chain() модулей Python itertools также можно использовать для объединения списков в Python.

  
import itertools list_of_lists = [[1, 5], [3, 4], [7, 12]] chained_list = list(itertools.chain(*list_of_lists)) print(chained_list)

Вывод

  
[1, 5, 3, 4, 7, 12]

Рассмотрим ситуацию, когда генерируется буквы и объединяются в список.

  
import itertools import string def generate_letter_range(start, stop): for letter in string.ascii_lowercase[start:stop]: yield letter list1 = generate_letter_range(0, 3) list2 = generate_letter_range(7, 16) list = list(itertools.chain(list1, list2)) print(list)

Вывод

  
['a', 'b', 'c', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p']

Получение нового списка из чисел:

  
import itertools list1 = [5, 73, 232, 1, 8] list2 = [19, 84, 56, 7] list3 = [10,20,30] list = list(itertools.chain(list1, list2, list3)) print(list)

В консоль выведет ответ:

  
[5, 73, 232, 1, 8, 19, 84, 56, 7, 10, 20, 30]

Генерация списков из рандомных букв. В первом списке 3 буквы, во втором 7.

  
import itertools import random import string def generate_letter_list(num_letters): for i in range(num_letters): yield random.choice(string.ascii_letters) num_list1 = 3 num_list2 = 7 list1 = generate_letter_list(num_list1) list2 = generate_letter_list(num_list2) combined_list = list(itertools.chain(list1, list2)) print(combined_list)

Вывод:

  
['d', 'e', 'O',  'M', 'q', 'i', 'N', 'V', 'd', 'C']

Надежные VDS/VPS для ваших Python-проектов

  • Premium 3.3 ГГц
  • Dedicated CPU
Москва
12 мес Скидка 10%
Cloud MSK 30

495 ₽/мес

Процессор
1 x 3.3 ГГц
Память
2 ГБ
NVMe
30 ГБ
Канал
1 Гбит/с
Публичный IP
Cloud MSK 40

765 ₽/мес

Процессор
2 x 3.3 ГГц
Память
2 ГБ
NVMe
40 ГБ
Канал
1 Гбит/с
Публичный IP

Итоги

Каждый из этих способов имеет свои особенности, и какой из них выбрать, зависит от того, что вам нужно сделать, сколько у вас данных и как быстро вы хотите получить результат. Если вы разберетесь в этих методах, то сможете лучше работать с данными в своих проектах на Python. Выберите тот способ, который вам подходит, и не бойтесь пробовать разные методы, чтобы получить лучший результат!

1056
7 минут чтения
Средний рейтинг статьи: 4

Читайте также

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
  • Ваш комментарий
  • Предпросмотр
Пока нет комментариев
Произошла неизвестная ошибка
Мы используем на сайте куки.
В интернете без них никак