- en
- Language: ru
- Documentation version: latest
16. Постижения¶
Последовательности - это особенность Python, которой мне будет очень не хватать, если мне когда-нибудь придется его покинуть. Последовательности - это конструкции, которые позволяют строить последовательности из других последовательностей. В Python 2 и Python 3 поддерживается несколько типов пониманий:
понимания списков
словарные толкования
понимания множеств
понимания генераторов
Мы будем обсуждать их по очереди. Как только вы освоите использование list осмыслений, вы сможете легко использовать любой из них.
16.1. list постижения¶
Понимание списков обеспечивает короткий и лаконичный способ создания списков. Они состоят из квадратных скобок, содержащих выражение, за которым следует предложение for, затем ноль или более предложений for или if. Выражения могут быть любыми, то есть в списки можно помещать любые объекты. Результатом будет новый список, составленный после оценки выражения в контексте клаузул if и for.
Блюпринт
variable = [out_exp for out_exp in input_list if out_exp == 2]
Вот небольшой пример:
multiples = [i for i in range(30) if i % 3 == 0]
print(multiples)
# Output: [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
Это может быть действительно полезно для быстрого создания списков. Некоторые даже предпочитают использовать его вместо функции filter. Понимание списков действительно сияет, когда вы хотите передать список методу или функции для создания нового списка путем добавления к нему в каждой итерации цикла for. Например, вы обычно делаете что-то вроде этого:
squared = []
for x in range(10):
squared.append(x**2)
Вы можете упростить его с помощью понимания списков. Например:
squared = [x**2 for x in range(10)]
16.2. dict постижения¶
Они используются аналогичным образом. Вот пример, который я недавно нашел:
mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
mcase_frequency = {
k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0)
for k in mcase.keys()
}
# mcase_frequency == {'a': 17, 'z': 3, 'b': 34}
В приведенном выше примере мы объединяем значения ключей, которые одинаковы, но имеют разный регистр. Лично я не часто использую dict понимания. Вы также можете быстро переключать ключи и значения словаря:
{v: k for k, v in some_dict.items()}
16.3. set постижения¶
Они также похожи на списки. Единственное отличие заключается в том, что в них используются скобки {}. Вот пример:
squared = {x**2 for x in [1, 1, 2]}
print(squared)
# Output: {1, 4}
16.4. generator постижения¶
Они также похожи на списковые вычисления. Единственное отличие заключается в том, что они не выделяют память под весь список, а генерируют по одному элементу за раз, что позволяет более эффективно использовать память.
multiples_gen = (i for i in range(30) if i % 3 == 0)
print(multiples_gen)
# Output: <generator object <genexpr> at 0x7fdaa8e407d8>
for x in multiples_gen:
print(x)
# Outputs numbers