[Перевод] Уменьшите использование циклов в Python

задняя часть Python Программа перевода самородков

Уменьшите использование циклов в Python

Как и почему следует сократить использование циклов в Python?

Photo by [Etienne Girardet](https://unsplash.com/@etiennegirardet?utm_source=medium&utm_medium=referral) on [Unsplash](https://unsplash.com?utm_source=medium&utm_medium=referral)

Python предоставляется нам различные методы кодирования.

В некотором смысле, это довольно инклюзивно.

Любой человек с любого языка может писать на Python.

Однако научиться писать на языке и писать на языке оптимально — это две разные вещи.

В этой серии называетсяPython ShortsВ этой статье я объясню некоторые из простых, но очень полезных конструкций, которые предоставляет Python, несколько советов и несколько примеров, с которыми я столкнулся в своей работе по науке о данных.

В этой статье,Я буду обсуждать Pythonforпетли и как максимально избегать их использования.

3 способа написать цикл for:

Поясню на простом примере.

Предположим, вы хотите получитьСумма квадратов в списке.

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

Это легко сделать с помощью циклов.

На самом деле, я хочу показать вамЯ вижу три способа выполнения одной и той же задачи и позволяю вам выбрать тот, который вы считаете лучшим.

x = [1,3,5,7,9]
sum_squared = 0

for i in range(len(x)):
    sum_squared+=x[i]**2

Когда я вижу приведенный выше код в коде Python, я знаю, что у человека есть опыт работы с C или Java.

совершить то же самое,Более питонический способДа:

x = [1,3,5,7,9]
sum_squared = 0

for y in x:
    sum_squared+=y**2

Это даже лучше.

Я не индексирую этот список. И мой код более читабелен.

Однако более питоническим способом это можно сделать в одну строку.

x = [1,3,5,7,9]
sum_squared = sum([y**2 for y in x])

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

Вы также можете использовать в понимании спискаif.

Предположим, мы просто хотим список четных квадратных чисел.

x = [1,2,3,4,5,6,7,8,9]
even_squared = [y**2 for y in x if y%2==0]
# 输出结果:
[4,16,36,64]

if-else?

Что, если нам нужны и четные квадраты, и нечетные кубы?

x = [1,2,3,4,5,6,7,8,9]
squared_cubed = [y**2 if y%2==0 else y**3 for y in x]
# 输出结果:
[1, 4, 27, 16, 125, 36, 343, 64, 729]

чудесный!

Поэтому, как правило, следуйте этому конкретномуМетодические рекомендации: всякий раз, когда вы хотите написатьforКогда говоря, вы должны задать себе следующие вопросы,

  • Это не обязательноforсделай это? Более питонический стиль.
  • Можно использоватьList Comprehensionсделай это? Если да, используйте его.
  • Можно ли не индексировать массив? Если нет, рассмотрите возможность использованияenumerate.

чтоenumerate?

Иногда нам нужен и индекс в массиве, и значение в массиве.

В этом случае я предпочитаю использоватьenumerateвместо индексированного списка.

L = ['blue', 'yellow', 'orange']
for i, val in enumerate(L):
    print("index is %d and value is %s" % (i, val))
# 输出结果:
index is 0 and value is blue
index is 1 and value is yellow
index is 2 and value is orange

Правило:

Никогда не индексируйте список, если вы не можете его использовать.

Попробуйте использовать словарное понимание

Вы также можете попробовать использоватьDictionary Comprehension, относительно новое дополнение к Python с синтаксисом, похожим на List Comprehension.

Поясню на примере. Я хочу получить словарь (ключ: значение в квадрате) для каждого значения в x .

x = [1,2,3,4,5,6,7,8,9]
{k:k**2 for k in x}
# 输出结果:
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

Что, если вы хотите получить словарь только с четными значениями?

x = [1,2,3,4,5,6,7,8,9]
{k:k**2 for k in x if x%2==0}
# 输出结果:
{2: 4, 4: 16, 6: 36, 8: 64}

Что делать, если вы хотите получить квадрат четных значений и куб нечетных значений одновременно?

x = [1,2,3,4,5,6,7,8,9]
{k:k**2 if k%2==0 else k**3 for k in x}
# 输出结果:
{1: 1, 2: 4, 3: 27, 4: 16, 5: 125, 6: 36, 7: 343, 8: 64, 9: 729}

в заключении

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

Итак, когда нужноforПри циклировании используйте понимание списка и понимание словаря. Когда требуется индекс массива, используйтеenumerate.

Избегайте циклов, таких как заражение

Ваш код будет более читабельным и удобным в сопровождении в долгосрочной перспективе.

Кроме того, если вы хотите узнать больше о Python 3, я хотел бы порекомендовать отличный курс от Мичиганского университета.Intermediate level Python. Должен посетить.

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

Как всегда, я приветствую отзывы и конструктивные комментарии, и со мной можно связаться через Twitter.@mlwhiz.

Первоначально опубликовано 23 апреля 2019 г.mlwhiz.com.

Если вы обнаружите ошибки в переводе или в других областях, требующих доработки, добро пожаловать наПрограмма перевода самородковВы также можете получить соответствующие бонусные баллы за доработку перевода и PR. начало статьиПостоянная ссылка на эту статьюЭто ссылка MarkDown этой статьи на GitHub.


Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из Интернета сНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,внешний интерфейс,задняя часть,блокчейн,продукт,дизайн,искусственный интеллектЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.