Языки на букву «P» сравниваем возможности Python и PHP

Оглавление (нажмите, чтобы открыть):

Основные типы данных в Python для начинающих

Каждое значение в Python имеет тип. Поскольку всё в Python — объекты, типы являются классами, а значения — экземплярами (объектами) этих классов.

Прим. перев. В Python 2 типы и классы — разные понятия, в то время как в Python 3 это одно и то же.

В Python есть разные типы, давайте рассмотрим самые основные.

Числа

Целые числа, числа с плавающей запятой и комплексные числа относятся к группе чисел. В Python они представлены классами int , float и complex .

Мы можем использовать функцию type() , чтобы узнать класс переменной или значения, и функцию isinstance() для проверки принадлежности объекта определённому классу:

Целые числа могут быть любой длины, они ограничиваются лишь доступной памятью.

Числа с плавающей запятой имеют ограниченную точность. Визуально разницу между целым числом и числом с плавающей запятой можно заметить в консоли по наличию точки: 1 — целое число, 1.0 — с плавающей запятой.

Комплексные числа записываются в форме x+yj , где x — действительная часть числа, а y — мнимая. Вот несколько примеров:

Обратите внимание, что значение переменной b было усечено.

Списки

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

Объявить список довольно просто. Внутрь квадратных скобок помещаются элементы списка, разделённые запятой:

Мы можем использовать оператор [] для извлечения элемента (такая операция называется “доступ по индексу”) или диапазона элементов (такая операция назвается “извлечение среза”) из списка. В Python индексация начинается с нуля:

Списки являются изменяемым типом, т.е. значения его элементов можно изменить:

Кортежи

Так же как и список, кортеж (tuple) является упорядоченной последовательностью элементов. Вся разница заключается в том, что кортежи неизменяемы.

Кортежи используются для защиты данных от перезаписи и обычно работают быстрее, чем списки, т.к. их нельзя изменять.

Для создания кортежа нужно поместить внутрь круглых скобок элементы, разделённые запятой:

Мы можем использовать оператор извлечения среза [] для извлечения элементов, но мы не можем менять их значения:

Строки

Строка представляет собой последовательность символов. Мы можем использовать одинарные или двойные кавычки для создания строки. Многострочные строки можно обозначить тройными кавычками, »’ или «»» :

Как и в случае со списками и кортежами, мы можем использовать оператор [] и со строками. Стоит отметить, что строки в Python относятся к категории неизменяемых последовательностей, то есть все функции и методы могут лишь создавать новую строку.

Множества

Множество является неупорядоченной уникализированной последовательностью. Объявляется множество с помощью элементов, разделённых запятой, внутри фигурных скобок:

Над множествами можно выполнять такие операции, как объединение и пересечение. Т.к. элементы в множестве должны быть уникальны, они автоматически удаляют дубликаты:

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

Словари

Словари — неупорядоченные наборы пар ключ-значение.

Они используются, когда нужно сопоставить каждому из ключей значение и иметь возможность быстро получать доступ к значению, зная ключ. В других языках словари обычно называются map , hash или object . Словари оптимизированы для извлечения данных. Чтобы извлечь значение, нужно знать ключ.

Словарь объявляется парами элементов в форме ключ:значение, заключенными в фигурные скобки:

Значение может быть любого типа, а вот ключ — только неизменяемого.

Мы используем ключ, чтобы получить соответствующее ему значение. Но не наоборот:

Преобразование типов данных

Мы можем преобразовывать значения из одного типа в другой с помощью таких функций, как int() , float() , str() и т.д.

При преобразовании числа с плавающей запятой в целое будет утеряна часть после запятой:

Для преобразования из/в строку должны использоваться совместимые значения:

Можно даже преобразовывать одну последовательность в другую:

Прим. перев. Для преобразования списка из символов обратно в строку нельзя вызвать str(список) , так как в результате мы получим строковое представление списка (наподобие того, что мы видим, когда выводим список на экран). Вместо этого нужно сделать следующее:

Для преобразования в словарь каждый элемент последовательности должен быть парой:

Интересуетесь Python? Тогда взгляните на нашу подборку книг для программистов любого уровня.

Языки на букву «P»: сравниваем возможности Python и PHP

proksey-net, Быстро освоили? Я вот Джангу все отодвигаю в долгий ящик. Сравнивать — невозможно, как жигуль-копейка и мерс последний. Копейка она везде ездить будет, зато с мерсом по скорости и удобству не сравнится.

Python без Джанго освоил за 2 дня и сделал небольшую библиотеку для MySQL:)
про жигуль и мерс не соглашусь. мерс и освоить проще 🙂

Это ещё большой вопрос, что будет быстрее, в масштабах конкретного большого проекта на конкретном боевом сервере с конкретной нагрузкой 🙂

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

Господа, вы хотите сказать высоконагруженные сайты тоже работают на текстовых скриптах что ли?

Про питон мне вообще не понравилось это https://en.wikipedia.org/wiki/Python_syntax_and_semantics#Indentation

JS задалбывает своей манерой смотреть в конец строки, а тут питон еще в начало ее смотрит, одуреть.

Опровергните, я во внимании. Текущие вакансии:
Python в Новосибирске (http://rabota.ngs.ru/vacancy?q=Python&salary=&currency=299&search_type=simple&search_key=xezlypn&order_by%5B%5D=cnt&order_dir%5B%5D=desc&period=&s=%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0%3A+%D0%BF%D0%BE+%D0%B4%D0%B0%D1%82%D0%B5+%E2%86%91&is_new_only=0&is_notempty_salary=&employer_group=&is_removal=) (шоу-балет не в счёт!)
PHP в Новосибирске (http://rabota.ngs.ru/vacancy?q=php&salary=&currency=299&search_type=simple)

php в Москве (http://msk.zarplata.ru/vacancy?q=php) столица — демпингует
по Питону в Москве никто не требуется.

PS: Только не знаю, опровергла или подтвердила.

Я чего, будучи ни ухом, ни рылом в Python (час экспериментов со здравствуймирными скриптами не в счёт), влез в этот топик, хочу пояснить…
Как-то понадобилось мне разобрать большой объём данных. И что-то подзадолбал PHP медленной работой. Стал искать, чем бы ещё это сделать. Надежда была как раз на современные мультипарадигменные языки типа Ruby и Python. Прочитал много хвалебных речей.
По факту, выяснил, что хвалят их в основном сами кодеры джанг и рельс, т.е. это носит характер религии.
Ну, да, где-то эти языки дают на несколько попугаев больше. Но в основной массе накладные расходы существенно не отличаются от PHP, особенно, не на синтетических тестах, а на реальных больших проектах со множеством «если». К этим накладным и «если» надо отнести, в том числе, и стоимость разработки. Но что меня ещё больше убило — попадались сравнения, где написанное на этих языках проигрывает PHP, причём, чисто в условиях highload!
В общем, шило на мыло, а ещё надо учесть то, что PHP сейчас стремительно развивается, и это уже не то недоразумение, что было 15 лет назад. Посмотрите, хотя бы, современные фреймворки. Моей ошибкой было то, что я сам недооценил этот язык и долго относился к нему с пренебрежением.

P.S. Не хочу, чтобы мою риторику восприняли как попытку принизить достоинства Python. Все инструменты хороши. Просто ошибкой было бы считать его серебрянной пулей, в результате применения которой вдруг сайты залетают и деньги повалятся с неба.

kostyanet, оно с одной стороны даже хорошо. Порядок как в армии.

В теории PHP должен сам себя убить. Зачем писать такие сложные конструкции как придумывают в фрейворках типа Yii, если оно уже сравнимо с исходником на С. Написал фреймворк на си с тем же php-интерфейом и вперде. Или я что-то не понимаю?

Ну то есть типа ASP и Бейсик.

Зачем писать такие сложные конструкции как придумывают в фрейворках типа Yii, если оно уже сравнимо с исходником на С. Написал фреймворк на си с тем же php-интерфейом и вперде. Или я что-то не понимаю?

видимо, на PHP написать проще, чем на C и потом компилировать модули для PHP:)

Что значит перегруженным? Вы просто отключаете модуль php, и подключаете модуль, скажем, yii. У которого API на том же самом php. Кажется в Пайтоне есть интепретатор написанный на Пайтоне.

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

Таким образом сложность скрипта нарастает до некоторого качественного уровня, затем удачные находки компилируются и хоба-на — интерфейсы по-прежнему сверкают глуботой и одновременно — простотой.

Знаю и то и другое, но Python гораздо лучше, чтобы было больше доверия к следующим словам скажу, что знаю еще C/C++, JavaScript ( естественно: shell, PL/SQL/MySQL, css, awk, lex, sed, yacc/bison, etc. .. unix tools )).
по производительности python и php мало чем отличаются, по крайней мере для сайтостроения, т.к. там гораздо большее значение имеет структура БД, количество этих самых запросов в БД и их качество.

Плюсы PHP:
Идет на любом хостинге
Заводится без каких либо настроек сервера
Распространенность
Дешевость кодеров
Легкий вход в язык
Шаблонизатор встроен в язык (отчасти это и минус)
Большое количество библиотек ( в основном ориентированных на функционал веба )

Минусы PHP:
Очень много говнокодеров ( производная его плюсов )
Дискредитирован среди опытных программистов
Как первый язык создает кашу в голове (располагает писать криво, косо, мешая типы между собой в перемешку c html и JS )
Очень долгое время слабая ориентация на ОО отсюда спагетти код вперемешку с html
Оринтированность на веб, поэтому скажем написать на нем нативное приложение вряд-ли получится

Мастер Йода рекомендует:  Преобразование XML XSLT с помощью Sablotron

Плюсы Python:
Красивый стройный код, pep8 и пр. Python заставляет писать опрятно
Очень много библиотек для разработки в т.ч. нативных приложений ( 3d, научные либы, для работы с графикой и большим количеством данных)
Очень много сильных программистов, математиков, физиков и т.д. пишут на этом языке, отсюда и либы и сильное сообщество
Полная интеграция с C++/С ( cython и т.д. ) где узкие места можно написать на C++ и использовать как обычную либу python
Если стихия php это веб, то стихия python это практически любая система. Многие встроенные утилиты linux написаны на python, он работает и в системах реального времени и на спец. оборудовании где частенько заменяет C/C++, на нем пишется логика поведения 3d персонажей в играх и т.д. и т.п. это по настоящему универсальный язык.

Минусы Python:
На shared хостинге редко работает корректно в связке с django ( требует VPS/VDS/dedicated )
Чтобы завелся проект нужны знания по администрированию linux и уметь читать мануалы в т.ч. на английском,
Инфраструктура Python более требовательная, люди здесь уже знают и умеют пользоваться git/svn/mercurial
В связке с wsgi памяти ест больше нежели php + php-fpm
Дорогие специалисты и их не много и они как правило заняты.

imagine, хорошо написали, некоторые уточнения
написать на нем нативное приложение вряд-ли получится PHP-GTK?

Python или PHP как первый язык…

Прежде стоит сказать, что я никогда не был связан с программированием: в школе ничего не проходили и с ВУЗом тоже не повезло. Однако, сдаваться же никто не собирается!

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

Сейчас мы с ним активно ищем качественный материал для самостоятельного углубленного изучения. Во времени не ограничены никак. Да вообще никак и ничем, что касаемо интернет-материала: нужно заплатить — заплатим, есть что-нибудь толковое в паблике — с удовольствием изучим. А мы уверены, что много чего есть.

Недавно, максимально насколько это было возможно изучили разметку HTML 4.01 и CSS 2.1 согласно спецификациям «W3C» и, сейчас продолжаем HTML5/CSS3. Эта часть, безусловно, никаких трудностей не доставляет ни в теории ни в практике; чего там, собственно, трудного, всё легко и понятно. //Отдельное спасибо за курсы от «Специалиста» людям, которые не хоронят их у себя на компьютере.

В выборе серверного языка мы не сошлись взглядами: я за изучение Python и, конечно же, последующее освоение Django; приятель на стороне PHP. Наши позиции не могут быть сколь угодно объективными по ряду обстоятельных причин, поэтому не разумно ограничить себя двумя мнениями.

Проект социальный. Множество взаимодействий с (дальше пока густой лес), социальный граф, логика как у существующих соц. сетей. Идея абсолютно другая: не третий фейсбук и не десятый контакт. Идея имеет самодостаточную роль в жизни, а потому не высосана из пальца, лишь бы что-нибудь сделать. Полагаю, что свеохнагрузки приходятся не на ЯП, а на БД. Полагаю, что правильная архитектура — залог успеха. И, полагаю, что можно обойтись языком, который всё же больше нравится. Но не исключаю, что есть более компетентные люди, которые развеют мои предположения.

Что изучать тем, кто только пришел в программирование: Python (Django) или PHP (скорее всего Yii)? Или?

Извиняюсь за то, что случайно попал не в нужный раздел — исправлюсь.

PHP vs Python. Что лучше изучить сначала?

Опции темы

Я соглашусь с большинством ,ни в коем случае не принижая достоинств Python. Просто php изначально веб-язык, он сам себе шаблонизатор. А python универсальный: и там, и здесь, и веб, и утилиты на нем писать хорошо — вот только на нем дольше «лепить гостевуху», условно говоря, а скомпилированные python-программы работают в 10-20 раз медленнее аналогов, написанных на с++, delphi, даже visual basic.

Тут вопрос приоритетов: нишевое решение или универсальное.

В целом, конечно, язык отличный. Да и не в языке вообще дело, а среде работы. Надо быть стремиться быть профи по Yii, django, Rails — такие специалисты ценятся.

Получилось роздувательство одного из извечных холиваров типа apple vs android и др.
Исчерпывающий ответ на этот вопрос уже был дан: зависит от целей. Так как ТС уже сказал, что цель — не только веб программирование, а и создание десктопных приложений, то ответ очевиден — Python. Но это исключительно исходя из выбора, предложенного ТСом. Для решение его целей я бы лично выбрал C++.
Я вообще не считаю, что уместно сравнивать эти два языка. Имхо — PHP это ведущее и наиболее эффективное решение в веб-программировании, в то время как позиции Python в своей нише довольно таки спорны (как сказал roots «скомпилированные python-программы работают в 10-20 раз медленнее аналогов»). Чем действительно Python радует, так это своей универсальностью.

Я когда был в универе — передо мной стоял выбор ПХП, Питон или Ява (еще был C#, но он не работал на линуксе). Я тогда выбрал Питон по озвученым выше причинам.

Сейчас ПХП шагнул вперед с того момента (7 лет прошло), а я уже не в теме -)

———- Сообщение добавлено 04:38 ———- Предыдущее 03:56 ———-

Общая проблема недекларативных языков -) будь то php, будь то руби. будь это питон ))
В отличии от руби, который пока еще далек от самого оптимального своего варианта. Питон на более выгодной позиции — самые медленные библиотеки уже переписали в Си. Я слышал что и в пхп уже появляются сильно оптимизированые компиляторы, но не видел ни одного опен-соурс решения.))

Эти мелкие аспекты мы можем обсуждать бесконечно. Реальность такова — что пхп программистом проще найти работу 🙂 Но стоит ли на это делать долгосрочную ставку — тут уж выбор каждого.

Не стоит начинать изучение программирования с PHP, если цель — именно научиться программированию. PHP для этого подходит слабо и может научить только говнокодингу, уж извините за выражение. Если стоит цель именно изучать программирование — следует начать с Паскаля, который как раз задумывался для обучения программированию. Рекомендую PascalABC. Либо, как вариант, — с C++, именно с него начинается изучение программирования в большинстве ВУЗов.
Именно по этим двум языкам огромное количество информации и доступной литературы позволит научиться писать качественный код.

P.S. изучить Питон, а затем пхп вряд ли получится — после питона программирование на php будет причинять моральные страдания, говорю по собственному опыту.

Последний раз редактировалось smalpik; 19.10.2013 в 03:24 .

Я сам начал с РНР, потом в ВУЗе нам дали основы С++ (на древнейшем Билдере, я уж ничего не помню), потом был Ассемблер и еще пара языков. но со временем понял, что РНР мне хватает для реализации 99% задач, иногда через костыли. за эти годы РНР не стоял на месте, стал несколько удобнее. Хотел бы начать изучать Питон, но понимаю, что мне надо «сегодня идея, завтра говнокод, послезавтра профит», а растягивать и учить другой язык, пытаться что-то кодить, мудрить, находить затыки и решать их — на это уже просто нет времени.

Если цель стоит «решить задачу максимально быстро», то РНР — идеальный вариант (ИМХО), для других целей может и лучше Питон, не могу сказать.

Кстати теперь и на пхп можно десктопные приложения создавать, PhpDevelStudio в этой среде

Если вы хотите разрабатывать для веб, то, конечно, PHP. Просто потому, что на нем написано большинство CMS, и вам наверняка придется столкнуться с этим языком. А затем — JavaScript, во-первых, потому что это вам тоже понадобится почти на любом сайте, а во-вторых, потому что это одновременно основной серверный язык для платформы .Net

Если же вы вообще хотите научиться программированию, то лучше всего, я думаю, начать с классических языков: C++, Java, Pascal, может быть C#. Java, кстати, тоже активно используется для веб-программирования в действительно крупных проектах.

Даниэль Алиевский

OneShot, глянул, заинтересовало жаль только что разработка умерла, по ходу
Буду смотреть, ведь без МуСкула это никуда не годится. А там, как я смотрю, СкуЛайт предлагают, если все удастся запустить — будет отлично!

[sarcasm]Ага, особенно если сравнивать CPython/PyPy vs visual basic[/sarcasm].
2ТС: Однозначно, python — даже думать нечего.
p.s. А почему не рассматриваете JS? После появления nodejs его можно рассматривать и как серверный язык.

Последний раз редактировалось Tiulkin; 27.10.2013 в 00:47 .

Рейтинг языков: Python — лидер

Дубликаты не найдены

Статистика — сложная штука, её можно считать по-разному. Если открыть тот же stackoverflow, то по колличеству тегов лидер JavaScript, затем Java, C, PHP и только потом идет Python.

Неправильно вы как-то считаете. Если на js и php пишут школьники, не читающие документацию это не значит что он популярнее. Это значит что у этих «программистов» больше вопросов, которые они не могут самостоятельно решить.

Я лишь привожу примеры, что статистику можно считать по-разному. Ок. Если stackoverflow завален школьниками, то возьмем статистику репозиториев github:

Здесь опять же JS лидер, затем опять же Java, а потом уже Python и остальные )

Кроме того на опеннете в новости описано как собиралась статисика, тупо по поиску цитата: ‘В основе метода заложена оценка результатов поиска по запросу » <название_языка>programming» на различных сайтах. ‘ очень сомнительный способ. p.s. это про статистику из поста.

Прочь, еретик! Питон — вершина творения человеческой мысли!

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

C? R? Вы, блядь, в своем уме?? Еще и HTML на 16 месте, дожили. Ворд и эксель еще впихните.

Кроме того, что есть C# и С++, ничего.

Тоже об этом подумал, хотя не знаю, что такое R.

Но С? Ещё и выше явы и плюсов? Пиздец сука блядь нахуй.

Хорошо, хоть паскаля и ады в списке нет.

Что не так с С и R?

Разработка программ на С требует негуманно много времени. Он, несомненно, еще используется и будет использоваться, но он уже много лет не в топе.
R — дык это вообще язык ученых, на нем коммерческие проекты толком-то и не пишут. Он никак не может быть популярнее ДЖС.
Ну и весь рейтинг языков программирования можно выбрасывать в мусорку, когда видишь на 16 месте язык гребаной разметки.

Путь развития. Php или Python(Django)

Наступил такой момент что уже пора выбрать определенное направление и углубленно его изучать, не для того чтобы было, а для того чтобы этим зарабатывать. Встал выбор между углубленным изучением php или перехода на Python(Django или другой фреймворк). Есть огромное желание заняться Python’ом, но есть страхи что будет куда сложнее найти работу из-за непопулярности(неизвестности) в СНГ, ибо php куда популярнее. Возможно, я не прав и в определенных кругах Python популярен и вакансии есть, но по моему опыту изучения фриланс площадок таковых очень мало. Хотелось бы спросить у опытных людей, оправданы ли мои страхи? И лучше не рисковать и дальше заниматься php?
PS до этого немного фрилансил на php и писал около 3 мини-проектов для себя.

UPD. Спасибо за ответы, но видимо не все меня поняли так как надо 🙂 Кто-то о великом, кто-то предлагает учить все сразу. Я понимаю что это средство реализации, но я считаю что в данный момент мне нужно определиться с выбором и использовать одно. Все таки, наверное, пойду в сторону Пайтона. Php конечно тоже не буду забывать, но в сейчас все усилия положу на изучение python+django.

1 ответов

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

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

Скажу так, что PHP гораздо проще усвоить. Pyton более комплексный язык. И знание Питона является некоторым определением более высокого уровня программиста. Но знать и ТО и ДРУГОЕ не только полезно, но и приятно для кошелька.

Изучив один язык НИКОГДА не надо останавливаться на нем.

ps/ Кстати, я бы поставил руби на одну полку с питоном.

Я бы на Вашем месте выбрал бы Python.Во первых у него красивей синтаксис и реализация ООП, фреймворки написанные на нем, работают быстрее.А PHP скоро уступит позиции Python, RoR.Проектов на Django в СНГ хватает, а меньшая распространенность, чем PHP снижает конкуренцию.
Также не стоит забывать о возможности реализовать проекты на Python+Django для Google App Engine, что открывает большие возможности по созданию крупных высоконагруженых приложений.

На сколько я знаю полноценных аналогов django на php нет (могу ошибаться). Я сейчас вполне спокойно фрилансю на django. Заказчики редко предъявляют требования на использование какой-то конкретной технологии, поэтому по кошельку сильно не ударит если будешь использовать django. А вообще лучше конечно знать обе технологии, так будешь более гибким.

А что мешает изучать и то и другое? Я, например, так и делаю — и доволен )
В ПХП совершенствоваться легче: он распространненее, Python изучать чуток тяжелее, зато он более гибкий и может тоже пригодиться.

Раньше я писал на чистом PHP, потом на фреймворке code-igniter. И как то передо мной тоже возник такой вопрос. Я выбрал джанго, и не жалею ни минуты. Зарабатываю фрилансом, и ни кто из заказчиков не задает вопросов,типа: «А как вы можете аргументировать выбор фреймворка?». Как привило заказчики не мыслят такими категориями. А инструмент на много гибче чем PHP. Python — язык общего назначения. Возможностей огромное количество!
Советую python/django.

P.S.:
Мое личное мнение что по комфортности PHP & Python можно сравнивать так же как Windows & Mac OS X.
Очевидно что является удобным инструментом для работы, а что проблемой(в абсолютном смысле, то есть чем то неразрешимым в принципе)

Я жалею, что не обратил свой взор на Python еще раньше. Теперь стараюсь наверстать упущенное.
Пусть меня php-ники (я сам пока таковой) закидают помидорами, но то, что можно на Django сделать парой строк (как в прямом так и в переносном значении), то на любом php framework (даже на самой простой kohana, про ZF2 вообще промолчу) потребует просто кучу кода, в каждом месте которого не сложно допустить ошибку или опечатку.
Про красоту кода на Python тоже не стоит забывать.
Про Ruby ничего не скажу, знаю лишь, что для web-разработок он может и поинтереснее будет, чем Django, но Python это не только же web-разработки. Так что мой выбор очевиден для себя.

если просто ищете работу — то php
если разговор идет о серьезном развитии — Python ( django ) . Хотя я вот выбрал ruby .

Как выбрать только русские слова из списка в python

У меня есть список слов как на английском так и на русском.
Например

Как можно пройдя циклом вывести только русские слова?
В будущем планируется перебирать большой объем данных. И как это можно сделать с учетом производительности?

2 ответа 2

Можно сделать через регулярное выражение, например:

Для повышения скорости фильтрации на многоядерном процессоре можно дробить исходный список слов на куски (скажем, по 100000) и запускать фильтрацию в отдельных потоках с последующей конкатенацией результатов в один список.

Списки (list). Функции и методы списков

Сегодня я расскажу о таком типе данных, как списки, операциях над ними и методах, о генераторах списков и о применении списков.

Что такое списки?

Списки в Python — упорядоченные изменяемые коллекции объектов произвольных типов (почти как массив, но типы могут отличаться).

Чтобы использовать списки, их нужно создать. Создать список можно несколькими способами. Например, можно обработать любой итерируемый объект (например, строку) встроенной функцией list:

Список можно создать и при помощи литерала:

Как видно из примера, список может содержать любое количество любых объектов (в том числе и вложенные списки), или не содержать ничего.

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

Возможна и более сложная конструкция генератора списков:

Но в сложных случаях лучше пользоваться обычным циклом for для генерации списков.

Функции и методы списков

Создать создали, теперь нужно со списком что-то делать. Для списков доступны основные встроенные функции, а также методы списков.

Таблица «методы списков»

Метод Что делает
list.append(x) Добавляет элемент в конец списка
list.extend(L) Расширяет список list, добавляя в конец все элементы списка L
list.insert(i, x) Вставляет на i-ый элемент значение x
list.remove(x) Удаляет первый элемент в списке, имеющий значение x. ValueError, если такого элемента не существует
list.pop([i]) Удаляет i-ый элемент и возвращает его. Если индекс не указан, удаляется последний элемент
list.index(x, [start [, end]]) Возвращает положение первого элемента со значением x (при этом поиск ведется от start до end)
list.count(x) Возвращает количество элементов со значением x
list.sort([key=функция]) Сортирует список на основе функции
list.reverse() Разворачивает список
list.copy() Поверхностная копия списка
list.clear() Очищает список

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

И, напоследок, примеры работы со списками:

Изредка, для увеличения производительности, списки заменяют гораздо менее гибкими массивами (хотя в таких случаях обычно используют сторонние библиотеки, например NumPy).

Почему язык Python такой популярный?

Britta_Perry

Там где нужна динамика, работа с формами, там где на C++ очень сложно писать.

(5) попробуй
class MyClass:

def __init__(self):
self.field = ‘value’

def __setattr__(self, name, val):
if name not in self.__fields:
print(‘No-no!’)
else:
object.__setattr__(self, name, val)

c = MyClass()
print(c.field)
c.field = 1
c.hacked = 2
print(c.field)
print(c.hacked)

(0) Питон не популярен.

у меня подчиненный хотел в него уйти, и не смог

кроме 6..8 действительно больших компаний (одна из них яндекс) с питом практически нет вакансий в России, вообще нет.

Все вакансии ведут через КА к этим «монстрам».

так, что популярность Питона — это миф.

(12) Приведи статистику. C# мало уступает Java, а Java это не только Энтерпрайз, но и андроид.

Еще раз питон в основном идет как дополнение к С++

Злопчинский
wormselfish
wormselfish

(5) >>Вот сейчас только что написал
>>b=MyClass1()
>>потом b.field=»dsfdsf»
>>field — несуществующее поле.
>>Интерпретатор не ругнулся.
>>Поле создалось.

Ошибаешься. Ты не обратился к несуществующему полю, а создал его и присвоил значение.

И то что с типами так все просто — это же хорошо!
Попробуй на С# присвой int16 к int32? Фиг. Придется преобразовывать. А зачем программисту делать работу которую обязан делать компьютер? Вот то то же!

(0) Потому что:
— простой синтаксис (об этом в этой ветке высказался каждый);
— много лицензионно-свободных библиотек всякого рода направленности;
— легкая интеграция с C++, например, через CPython;

Основными драйверами языка являются web-проекты и разные научные проекты. Сейчас в тренде BigData, MachineLearning, ComputerVision. Под это все есть либо адаптеры, либо библиотеки с уже реализованными математическими алгоритмами.

От идеи до реализации прототипа на языке python уходит минимум времени. Открыл любимую IDE (да хоть сразу в py-файле), импортнул нужные мат.библиотеки и реализовал. Все! Нет танцев из-за строгой типизации и прочего.

Как язык для прототипирования, python идеален.

(2)>>В 1С нет ни наследования, ни полиморфизмов, ни виртуальных методов, ни интерфейсов.

А оно тут надо? Вот ты сам, на вскидку можешь придумать хоть один смысл полиморфизм или наследования в 1С? Я уж не говорю про интерфейсы:-)

(12) кросплатформенность, скорость выполнения кода не меньше.

p/s правда мне синтаксис не нравится)

Naf_kultura
Naf_kultura

Странно, зачем учить язык если не понимаешь для чего он нужен? Хм.

Питон хорошо для своих нужд, если нужна строгая типизация то вам в С#, C++ или Java. А хаять на динамический язык что у ничего динамическая типизация неправильно.

(55) Ну тогда тема является разжиганием «холивара».

И почему тогда тема исключительно про Python? PHP, Ruby, Perl тоже давайте обсудим, какие они плохие и что они не решают возложенные на них обязанности, хотя постойте.

Примеры применения регулярных выражений в Python

Регулярные выражения, также называемые regex, синтаксис или, скорее, язык для поиска, извлечения и работы с определенными текстовыми шаблонами большего текста. Он широко используется в проектах, которые включают проверку текста, NLP (Обработка естественного языка) и интеллектуальную обработку текста.

Введение в регулярные выражения

Регулярные выражения, также называемые regex, используются практически во всех языках программирования. В python они реализованы в стандартном модуле re .
Он широко используется в естественной обработке языка, веб-приложениях, требующих проверки ввода текста (например, адреса электронной почты) и почти во всех проектах в области анализа данных, которые включают в себя интеллектуальную обработку текста.

Эта статья разделена на 2 части.

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

Итак, сначала вы познакомитесь с 5 основными функциями модуля re , а затем посмотрите, как создавать регулярные выражения в python.
Узнаете, как построить практически любой текстовый шаблон, который вам, скорее всего, понадобится при работе над проектами, связанными с поиском текста.

Что такое шаблон регулярного выражения и как его скомпилировать?

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

Основным примером является \s+ .
Здесь \ s соответствует любому символу пробела. Добавив в конце оператор + , шаблон будет иметь не менее 1 или более пробелов. Этот шаблон будет соответствовать даже символам tab \t .

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

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

Как разбить строку, разделенную регулярным выражением?

Рассмотрим следующий фрагмент текста.

Тест на знание python

У меня есть три курса в формате “[Номер курса] [Код курса] [Название курса]”. Интервал между словами разный.

Передо мной стоит задача разбить эти три предмета курса на отдельные единицы чисел и слов. Как это сделать?
Их можно разбить двумя способами:

  • Используя метод re.split .
  • Вызвав метод split для объекта regex .

Оба эти метода работают. Но какой же следует использовать на практике?
Если вы намерены использовать определенный шаблон несколько раз, вам лучше скомпилировать регулярное выражение, а не использовать re.split множество раз.

Поиск совпадений с использованием findall, search и match

Предположим, вы хотите извлечь все номера курсов, то есть 100, 213 и 156 из приведенного выше текста. Как это сделать?

Что делает re.findall()?

В приведенном выше коде специальный символ \ d является регулярным выражением, которое соответствует любой цифре. В этой статье вы узнаете больше о таких шаблонах.
Добавление к нему символа + означает наличие по крайней мере 1 числа.

Подобно + , есть символ * , для которого требуется 0 или более чисел. Это делает наличие цифры не обязательным, чтобы получилось совпадение. Подробнее об этом позже.

В итоге, метод findall извлекает все вхождения 1 или более номеров из текста и возвращает их в список.

re.search() против re.match()

Как понятно из названия, regex.search() ищет шаблоны в заданном тексте.
Но, в отличие от findall , который возвращает согласованные части текста в виде списка, regex.search() возвращает конкретный объект соответствия. Он содержит первый и последний индекс первого соответствия шаблону.

Аналогично, regex.match() также возвращает объект соответствия. Но разница в том, что он требует, чтобы шаблон находился в начале самого текста.

В качестве альтернативы вы можете получить тот же результат, используя метод group() для объекта соответствия.

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

Для изменения текста, используйте regex.sub() .
Рассмотрим следующую измененную версию текста курсов. Здесь добавлена табуляция после каждого кода курса.

Из вышеприведенного текста я хочу удалить все лишние пробелы и записать все слова в одну строку.

Для этого нужно просто использовать regex.sub для замены шаблона \s+ на один пробел .

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

Это можно сделать, используя отрицательное соответствие (?!\n) . Шаблон проверяет наличие символа новой строки, в python это \n , и пропускает его.

Группы регулярных выражений

Группы регулярных выражений — функция, позволяющая извлекать нужные объекты соответствия как отдельные элементы.

Предположим, что я хочу извлечь номер курса, код и имя как отдельные элементы. Не имея групп мне придется написать что-то вроде этого.

Давайте посмотрим, что получилось.
Я скомпилировал 3 отдельных регулярных выражения по одному для соответствия номерам курса, коду и названию.
Для номера курса, шаблон [0-9]+ указывает на соответствие всем числам от 0 до 9. Добавление символа + в конце заставляет найти по крайней мере 1 соответствие цифрам 0-9. Если вы уверены, что номер курса, будет иметь ровно 3 цифры, шаблон мог бы быть [0-9] <3>.

Для кода курса, как вы могли догадаться, [А-ЯЁ] <3>будет совпадать с 3 большими буквами алфавита А-Я подряд (буква “ё” не включена в общий диапазон букв).

Для названий курса, [а-яА-ЯёЁ] <4,>будем искать а-я верхнего и нижнего регистра, предполагая, что имена всех курсов будут иметь как минимум 4 символа.

Можете ли вы догадаться, каков будет шаблон, если максимальный предел символов в названии курса, скажем, 20?
Теперь мне нужно написать 3 отдельные строки, чтобы разделить предметы. Но есть лучший способ. Группы регулярных выражений.
Поскольку все записи имеют один и тот же шаблон, вы можете создать единый шаблон для всех записей курса и внести данные, которые хотите извлечь из пары скобок ().

Обратите внимание на шаблон номера курса: [0-9]+ , код: [А-ЯЁ] <3>и название: [а-яА-ЯёЁ] <4,>они все помещены в круглую скобку (), для формирования группы.

Что такое “жадное” соответствие в регулярных выражениях?

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

Давайте рассмотрим пример фрагмента HTML, где нам необходимо получить тэг HTML.

Вместо совпадения до первого появления ‘>’, которое, должно было произойти в конце первого тэга тела, он извлек всю строку. Это по умолчанию “жадное” соответствие, присущее регулярным выражениям.

С другой стороны, ленивое соответствие “берет как можно меньше”. Это можно задать добавлением ? в конец шаблона.

Если вы хотите получить только первое совпадение, используйте вместо этого метод поиска search .

Наиболее распространенный синтаксис и шаблоны регулярных выражений

Теперь, когда вы знаете как пользоваться модулем re, давайте рассмотрим некоторые обычно используемые шаблоны подстановок.

Основной синтаксис

. Один символ кроме новой строки
\. Просто точка . , обратный слеш \ убирает магию всех специальных символов.
\d Одна цифра
\D Один символ кроме цифры
\w Один буквенный символ, включая цифры
\W Один символ кроме буквы и цифры
\s Один пробельный (включая таб и перенос строки)
\S Один не пробельный символ
\b Границы слова
\n Новая строка
\t Табуляция

Модификаторы

$ Конец строки
^ Начало строки
ab|cd Соответствует ab или de.
[ab-d] Один символ: a, b, c, d
[^ab-d] Любой символ, кроме: a, b, c, d
() Извлечение элементов в скобках
(a(bc)) Извлечение элементов в скобках второго уровня

Повторы

[ab]

2 непрерывных появления a или b
[ab]

от 2 до 5 непрерывных появления a или b
[ab]

2 и больше непрерывных появления a или b
+ одно или больше
* 0 или больше
? 0 или 1

Примеры регулярных выражений

Любой символ кроме новой строки

Точки в строке

Любая цифра

Все, кроме цифры

Любая буква или цифра

Все, кроме букв и цифр

Только буквы

Соответствие заданное количество раз

1 и более вхождений

Любое количество вхождений (0 или более раз)

0 или 1 вхождение

Граница слова
Границы слов \b обычно используются для обнаружения и сопоставления началу или концу слова. То есть, одна сторона является символом слова, а другая сторона является пробелом и наоборот.

Например, регулярное выражение \btoy совпадает с ‘toy’ в ‘toy cat’, но не в ‘tolstoy’. Для того, чтобы ‘toy’ соответствовало ‘tolstoy’, используйте toy\b .
Можете ли вы придумать регулярное выражение, которое будет соответствовать только первой ‘toy’в ‘play toy broke toys’? (подсказка: \ b с обеих сторон)
Аналогично, \ B будет соответствовать любому non-boundary( без границ).
Например, \ Btoy \ B будет соответствовать ‘toy’, окруженной словами с обеих сторон, как в ‘antoynet’.

Практические упражнения

Давайте немного попрактикуемся. Пришло время открыть вашу консоль. (Варианты ответов здесь)

1. Извлеките никнейм пользователя, имя домена и суффикс из данных email адресов.

2. Извлеките все слова, начинающиеся с ‘b’ или ‘B’ из данного текста.

3. Уберите все символы пунктуации из предложения

4. Очистите следующий твит, чтобы он содержал только одно сообщение пользователя. То есть, удалите все URL, хэштеги, упоминания, пунктуацию, RT и CC.

  1. Извлеките все текстовые фрагменты между тегами с HTML страницы: https://raw.githubusercontent.com/selva86/datasets/master/sample.html
    Код для извлечения HTML страницы:

Ответы

\b находится слева от ‘B’, значит слово должно начинаться на ‘B’.
Добавьте flags=re.IGNORECASE , что бы шаблон был не чувствительным к регистру.

Надеемся, информация была вам полезна. Стояла цель — познакомить вас с примерами регулярных выражений легким и доступным для запоминания способом.

Добавить комментарий