
Шаг 4. Распаковка коллекций
Баллов за прохождение: 1
Распаковка коллекций
Распаковка коллекций в 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