<div><img src="https://top-fwz1.mail.ru/counter?id=3548135;js=na" style="position:absolute;left:-9999px;" alt="Top.Mail.Ru" /></div>
Бесплатный перенос IT-инфраструктуры в облако

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

Команда Timeweb Cloud
Команда Timeweb Cloud
Наши инженеры, технические писатели, редакторы и маркетологи
26 декабря 2024 г.
33
7 минут чтения
Средний рейтинг статьи: 5

В 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

Способ 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-проектов

Итоги

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

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
26 декабря 2024 г.
33
7 минут чтения
Средний рейтинг статьи: 5
Пока нет комментариев