- Оригинальный адрес:Minimize for loop usage in Python
- Оригинальный автор:Rahul Agarwal
- Перевод с:Программа перевода самородков
- Постоянная ссылка на эту статью:GitHub.com/rare earth/gold-no…
- Переводчик:qiuyuezhong
- Корректор:MollyAredtana,shixi-li
Уменьшите использование циклов в Python
Как и почему следует сократить использование циклов в Python?
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,внешний интерфейс,задняя часть,блокчейн,продукт,дизайн,искусственный интеллектЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.