Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.
Как запускать примеры из этого руководства
Для новичков расскажем, как выполнить примеры из этой инструкции, чтобы потренироваться в объединении списков.
- Создайте файл, например,
main.py, используя любой текстовый редактор. - Вставьте код из примера в созданный файл и сохраните его.
- Откройте командную строку (Windows) или терминал (Linux/macOS) и перейдите в директорию, где находится ваш файл, с помощью команды
cd C:\Users\, гдеC:\Users— название директории. - Выполните команду
python main.pyилиpython3 main.pyдля запуска вашего скрипта. - Результат выполнения программы будет выведен в консоли.
Оператор + может использоваться для объединения двух списков в 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]С помощью оператора * можно легко объединить списки в 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]В этом методе мы используем цикл 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]Метод 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)Рассмотрим ситуацию, когда генерируется буквы и объединяются в список.
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']Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.