Найти в Дзене
Дойти до IT

Python - Распаковка коллекций

В Python можно извлечь элементы из итерируемых объектов (списков, кортежей, множеств и словарей) и присвоить их переменным в одной строке кода. Этот метод называется «распаковка коллекций» (также «распаковка последовательностей» или «распаковка кортежей»). # Распаковка списка
my_list = [1, 2, 3]
a, b, c = my_list
print(a, b, c) # Output: 1 2 3 Каждой переменной присваивается по одному значению. # Распаковка словаря (только ключи)
my_dict = {'a': 10, 'b': 20, 'c': 30}
m, n, o = my_dict
print(m, n, o) # Output: 'a' 'b' 'c' (распаковываются только ключи) # Распаковка словаря (ключи и значения)
my_dict = {'a': 10, 'b': 20, 'c': 30}
m, n, o = my_dict.values()
print(m, n, o) # Output: 10 20 30 (распаковываются значения) Однако не всегда бывает так, что ключи или элементы последовательности равны количеству переменных. # Больше значений, чем переменных
my_list = [1, 2, 3, 4, 5]
a, b, c = my_list[:3]
print(a, b, c) # Output: 1 2 3 # Больше переменных, чем значений
my_tuple = (1, 2)
x, y, z
Оглавление

В Python можно извлечь элементы из итерируемых объектов (списков, кортежей, множеств и словарей) и присвоить их переменным в одной строке кода. Этот метод называется «распаковка коллекций» (также «распаковка последовательностей» или «распаковка кортежей»).

Пример 1: распаковка списков, кортежей и множеств.

# Распаковка списка
my_list = [1, 2, 3]
a, b, c = my_list
print(a, b, c) # Output: 1 2 3

Каждой переменной присваивается по одному значению.

Пример 2: Распаковка словарей.

# Распаковка словаря (только ключи)
my_dict = {'a': 10, 'b': 20, 'c': 30}
m, n, o = my_dict
print(m, n, o) # Output: 'a' 'b' 'c' (распаковываются только ключи)

# Распаковка словаря (ключи и значения)
my_dict = {'a': 10, 'b': 20, 'c': 30}
m, n, o = my_dict.values()
print(m, n, o) # Output: 10 20 30 (распаковываются значения)

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

Пример 3: в этом случае значений больше, чем переменных, и мы можем присвоить только первые 3:

# Больше значений, чем переменных
my_list = [1, 2, 3, 4, 5]
a, b, c = my_list[:3]
print(a, b, c) # Output: 1 2 3

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

# Больше переменных, чем значений
my_tuple = (1, 2)
x, y, z = my_tuple # ValueError: not enough values to unpack (expected 3, got 2)

Тогда Python выдаст ошибку ValueError, потому что для одной из переменных значений не хватило.

Пример 5: Использование оператора звёздочка * для переменного количества значений:

# Использование оператора "звездочка" для переменного количества значений
my_list = [1, 2, 3, 4, 5]
a, b, *rest = my_list
print(a, b) # Output: 1 2
print(rest) # Output: [3, 4, 5]

В этом случае первым двум переменным присваиваются первые 2 значения, а последней переменной все остальные значения.

Пример 6:

# Использование оператора "звездочка" для переменного количества переменных
my_tuple = (1, 2, 3, 4, 5)
x, *middle, z = my_tuple
print(x) # Output: 1
print(middle) # Output: [2, 3, 4]
print(z) # Output: 5

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

Оператор "звездочка" (*) может использоваться в Python для распаковки последовательности значений и передачи их в функцию или другую конструкцию:

numbers = [1, 2, 3, 4, 5]
# Использование оператора "звездочка" для распаковки списка в аргументы функции print()
print(*numbers)

В этом примере оператор "звездочка" перед переменной numbers распаковывает список [1, 2, 3, 4, 5] в отдельные аргументы функции print(). Каждый элемент списка будет напечатан на отдельной строке.

1 2 3 4 5