- 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