В Python доступно множество типов данных для хранения информации и манипуляции ею. Списки, кортежи, наборы и словари являются одними из наиболее часто используемых.
Список — это неупорядоченная коллекция данных, которая не может содержать повторяющихся элементов. Кортеж, с другой стороны, также является упорядоченной коллекцией, но его порядок нельзя изменить. Словари, аналогичные наборам, организованы парами ключ-значение, что позволяет эффективно извлекать определенные значения на основе соответствующих им ключей.
Списки, наоборот, представляют собой просто упорядоченные коллекции элементов, в которые элементы можно добавлять или удалять по мере необходимости. Они особенно полезны для гибкого отслеживания нескольких элементов.
В этом руководстве мы рассмотрим, как объединять списки в Python 3.11. Мы приведем примеры, иллюстрирующие процесс и демонстрирующие его функциональность.
Для новичков расскажем, как выполнить примеры из этой инструкции, чтобы потренироваться в объединении списков.
main.py
, используя любой текстовый редактор.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]
vds
С помощью оператора *
можно легко объединить списки в 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]
Генератор списка использует цикл 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]
Модуль 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. Выберите тот способ, который вам подходит, и не бойтесь пробовать разные методы, чтобы получить лучший результат!