Упрощение Python кода с помощью знакомых инструментов

В этой статье мы рассмотрим один из приёмов упрощения Python кода с помощью известного вам инструмента – функции enumerate().

Python кодаБольшинство людей, выучив что-то новое, добавляют знания в свою “копилку полезной информации”. Зачастую они на 100% уверены, что эта информация точно пригодится, но после никак не могут найти ей практическое применение.

Нередко программисты, начинающие изучать Python, сталкиваются с проблемой, когда необходимо реализовать словарь, в котором значение сопоставляется с индексом: {'Bob' : 0} и т. п.

Чтобы внести немного ясности, вот что нужно сделать:

input = ['Duration', 'F0', 'F1', 'F2', 'F3']
output = {'Duration': 0, 'F0': 1, 'F1': 2, 'F2': 3, 'F3': 4}

Целью создания является словарь, который сопоставит каждый элемент во входном списке с индексом элемента в этом самом списке. Такой словарь может быть применен для поиска индексов с использованием элементов в качестве ключей.

Вот как выглядит обычная реализация:

>>> {f:i for f, i in zip(input, range(len(input)))}
{'Duration': 0, 'F0': 1, 'F1': 2, 'F2': 3, 'F3': 4}

Код неплохой, однако можем ли мы сделать его лучше?

Упрощения Python кода с помощью enumerate(): реализация

Это именно та ситуация, в которой оказывается большинство людей после изучения нового материала. Вы интуитивно понимаете, что существует способ реализации с использованием enumerate(), но понятия не имеете, как это сделать.

Первая мысль, которая, скорее всего, пришла вам в голову заключалась в том, что можно было бы немного сократить этот код:

>>> dict(zip(input, range(len(input))))
{'Duration': 0, 'F0': 1, 'F1': 2, 'F2': 3, 'F3': 4}

Уже лучше, но range(len(...)) всё ещё выбивается из общей картины. Давайте попробуем поиграть с enumerate():

>>> list(enumerate(input))
[(0, 'Duration'), (1, 'F0'), (2, 'F1'), (3, 'F2'), (4, 'F3')]

Итак, мы можем использовать enumerate() вкупе с индексом в списке. Давайте попробуем превратить это в словарь:

>>> dict(enumerate(input))
{0: 'Duration', 1: 'F0', 2: 'F1', 3: 'F2', 4: 'F3'}

В целом, это именно то, к чему мы и стремились, но "в обратном порядке”. Вместо сопоставления ключа к индексу, мы сопоставляем индекс к ключу. Как мы можем это изменить?

>>> {f: i for i, f in enumerate(input)}
{'Duration': 0, 'F0': 1, 'F1': 2, 'F2': 3, 'F3': 4}

Отлично, мы добились своего!

Заключение

Как можно заметить, действительно существует способ, который смог бы “почистить” код с помощью enumerate().

Python является отличным языком программирования для такого рода экспериментов. Вы не сможете сделать что-то похожее с помощью, например, С++. Это одна из лучших функций Python, которую вы обязательно должны уметь использовать для упрощения своего Python кода.

Оригинал

Статьи по теме:

МЕРОПРИЯТИЯ

Комментарии

ВАКАНСИИ

Добавить вакансию
PHP Developer
от 200000 RUB до 270000 RUB
Golang разработчик (middle)
от 230000 RUB до 300000 RUB
Продуктовый аналитик
Екатеринбург, по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ