Дата публикации Aug 19, 2018
Независимо от того, являетесь ли вы Data Scientist, веб-разработчиком, работающим с API, или любым другим из длинного списка ролей, есть вероятность, что в какой-то момент вы наткнетесь на Python.
Некоторые из нас любят его за его простоту, его текучесть и разборчивость. Другие ненавидят его за то, что он не так эффективен, как C или чистая сборка, имеет Duck Typing или однопоточен (ish).
Независимо от того, к какой группе вы принадлежите, если вы находитесь в положении, в котором вы хотите / должны писать код Python, вам нужно, чтобы он был как можно более разборчивым. Или вы, возможно, натолкнулись на понимание списка в дикой природе и не понимаете, как его приручить. Если что-то из этого является правдой, то эта статья для вас.
Прежде всего, давайте определимся с нашими условиями. Понимание списка - это кусочек синтаксического сахара, который заменяет следующий шаблон:
С этим, эквивалентно, один:
Каковы преимущества использования списочных представлений? Прежде всего, вы сводите 3 строки кода в одну, которая будет мгновенно узнаваема для любого, кто понимает понимание списка. Во-вторых, второй код работает быстрее, поскольку Python сначала выделяет память списка, прежде чем добавлять в него элементы, вместо того, чтобы изменять размер во время выполнения. Это также позволит избежать необходимости звонить, чтобы «добавить», который может быть дешевым, но сложным. Наконец, код, использующий понимание, считается более «Pythonic» - лучше подходящим для стиля Python.
Другое, более тонкое преимущество - обнаружение запаха. Ваш код без понимания может выглядеть так:
Если предыдущий или следующий код достаточно длинный в ‘some_function», Этот бит в списке может потеряться. Но использование списочных пониманий непосредственно в этих 6 строках выглядит не очень красиво:
Попытка разобрать это своими глазами вызовет у вас головную боль. Есть несколько бумажных пакетов под вашими сиденьями на случай, если кому-то из вас понадобится их использовать. Что тут происходит? Ну, понятно, что немного логики следует абстрагировать в новую функцию, например так:
Затем эти первые шесть строк кода в конечном итоге просто
another_list = [new_function(i) for i in range(k)]
Что гораздо понятнее (если бы я не выбрал такие ужасные названия для наших функций) и читается быстрее, если вы знаете, что происходит. Некоторые могут возразить, что в итоге я добавил 6 строк служебного кода, чтобы добраться до этого места. Это правда, но если такое поведение появилось хотя бы еще раз в коде, то даже это на самом деле не потеря. И даже если бы это было не так, то, что мы теряем в размере кода, мы получаем в обслуживании и удобочитаемости, которые следует искать.
Хорошие программисты пишут код, понятный людям.
Мартин Фаулер
Некоторые другие вещи, которые легко сделать со списком
Чтобы убедиться в существенном повышении производительности, я решил провести несколько тестов. Я запустил версию цикла for и версию со списком того же кода, с фильтрацией и без нее. Вот фрагмент теста:
list_aМетоды генерируют списки обычным способом, с циклом for и добавлением.list_bметоды используют списки.
Мои результаты были следующими:
Я призываю вас запустить этот же скрипт на вашем компьютере и убедиться в этом, возможно, даже изменить размер ввода.
Мы видим увеличение скорости на 33% от перехода к списочным представлениям в нефильтрованном случае, тогда как отфильтрованный алгоритм получает только 15%. Это подтверждает нашу теорию о том, что главное преимущество в производительности заключается в отсутствии необходимостиAppendметод на каждой итерации, который пропускается на каждой другой итерации в отфильтрованном случае.
Наконец, я должен добавить, что все, что я только что рассказал вам о списках, можно сделать с помощью словарей Python.
Это был мой ускоренный курс по списку, надеюсь, вам понравилось! Если есть какие-либо функции, которые, по вашему мнению, я должен был упомянуть и не упомянул, или у вас есть какие-либо жалобы по поводу суть, пожалуйста, сообщите мне.
Наконец, есть книга О'Рейли, которую я люблю, и я нашел ее очень полезной, когда начал свое путешествие по науке о данных. Это книга, которую я выучил из списка Это называетсяНаука о данных с нуля с Pythonи это, вероятно, половина причины, по которой я получил свою работу. Если вы читаете это далеко, вы можете наслаждаться этим!
П.С .: Если вы хотите расширить эту тему, я предлагаю вам прочитать мою статью наВыражения генератора Python, Я также призываю вас следовать за мной для получения дополнительных уроков, советов и подсказок по Python.
© machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map