Архив автора: admin

Python. Давайте создадим простой HTTP-сервер

Веб-серверы есть везде.

Черт возьми, вы взаимодействуете с одним прямо сейчас!

Независимо от того, какой вы разработчик программного обеспечения, в какой-то момент вашей карьеры вам придется взаимодействовать с веб-серверами. Может быть, вы создаете сервер API для бэкэнда. Или, может быть, вы просто настраиваете веб-сервер для своего сайта.

В этой статье мы расскажем, как создать самый простой http веб-сервер на Python.

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

Если вы уже знаете, как работают веб-серверы, вы можете сразу перейти к этому разделу.

  • Что такое HTTP-сервер?
  • Адрес сокета TCP
  • Создайте простой файл HTTP
  • Создать HTTP веб-сервер

 

Что такое HTTP-сервер?

Веб-сервер HTTP — это не что иное, как процесс, который выполняется на вашем компьютере и выполняет ровно две вещи:

1- Прослушивает входящие HTTP-запросы на определенный адрес сокета TCP (IP-адрес и номер порта, о которых мы расскажем позже)

2- Обрабатывает этот запрос и отправляет ответ обратно пользователю.

 

Но что на самом деле происходит под капотом?

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

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

На высоком уровне, когда вы набираете www.yandex.ru  в своем браузере, ваш браузер создаст сетевое сообщение, называемое HTTP-запросом.

Этот запрос будет распространяться на компьютер yandex, на котором работает веб-сервер. Этот веб-сервер перехватит ваш запрос и обработает его, отвечая HTML-кодом домашней страницы yandex.

Наконец, ваш браузер отображает этот HTML на экране, и это то, что вы видите на своем экране.

Каждое взаимодействие с домашней страницей yandex после этого (например, когда вы нажимаете на ссылку) инициирует новый запрос и ответ точно так же, как первый.

Повторим еще раз: на машине, которая получает запрос http, работает программный процесс, называемый веб-сервером. Этот веб-сервер отвечает за перехват этих запросов и их обработку соответствующим образом.

Хорошо, теперь, когда вы знаете, что такое веб-сервер и какова его функция, вам может быть интересно, как запрос в первую очередь достигает машины yandex?

Хороший вопрос!

Позвольте нам объяснить, как, но опять же … на высоком уровне.

 

Адрес сокета TCP

Любое http-сообщение (будь то запрос или ответ) должно знать, как добраться до места назначения.

Чтобы достичь места назначения, каждое http-сообщение содержит адрес, называемый адресом TCP назначения.

И каждый TCP-адрес состоит из IP-адреса и номера порта.

Мы знаем, что все эти аббревиатуры (TCP, IP и т. д.) могут быть ошеломляющими, если ваши сетевые знания не сильны.

Так где же этот адрес, когда все, что вы сделали, и набрали www.yandex.ru в вашем браузере?

Ну, это доменное имя преобразуется в IP-адрес через большую распределенную базу данных, называемую DNS.

Хотите проверить, что это за IP-адрес?

Легко! Зайдите в свой терминал и сделайте следующее:

$ host yandex.ru

Yandex.ru has address 77.88.55.66                                                                                                                                               

Yandex.ru has address 5.255.255.70                                                                                                                                              

Yandex.ru has address 77.88.55.70                                                                                                                                               

Yandex.ru has address 5.255.255.60                                                                                                                                              

Yandex.ru has IPv6 address 2a02:6b8:a::a                                                                                                                                        

Yandex.ru mail is handled by 10 mx.Yandex.ru.

 

Как видите, как DNS переведет yandex.ru на любой из указанных выше адресов.

Один только IP-адрес позволит HTTP-сообщению поступить на нужный компьютер, но вам все равно нужен номер порта, чтобы HTTP-запрос поступил именно на веб-сервер.

Другими словами, веб-сервер — это обычное сетевое приложение, которое прослушивает определенный порт.

И HTTP-запрос ДОЛЖЕН быть адресован этому порту.

Так где же номер порта при вводе www.yandex.ru ?

По умолчанию номер порта равен 80 для http и 443 для https, поэтому даже если вы не указали номер порта явно, он все еще там.

И если веб-сервер прослушивает номер порта не по умолчанию (ни 80, ни 443), вы должны явно указать номер порта следующим образом:

www.yandex.ru:445

 

К настоящему времени у вас должна быть вся необходимая информация для создания http-сервера на Python.

Так что без дальнейших церемоний, давайте начнем.

 

Создайте простой файл HTML

Вот что мы хотим сделать.

Мы хотим создать простой http-сервер, который обслуживает статическую HTML-страницу.

Давайте создадим нашу HTML-страницу.

<html>

    <head>

        <title>Python-это потрясающе!</title>

    </head>

    <body>

        <h1>yandex</h1>

        <p>Поздравляю! Сервер HTTP работает!</p>

    </body>

</html>

 

Теперь сохраните этот файл как index.html.

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

 

Создать HTTP веб-сервер

Чтобы создать веб-сервер в Python 3, вам нужно импортировать два модуля: http.server и socketserver

Обратите внимание, что в Python 2 был модуль с именем  SimpleHTTPServer. Этот модуль был объединен с http.server в Python 3

Давайте посмотрим на код для создания http-сервера

import http.server

import socketserver



PORT = 8080

Handler = http.server.SimpleHTTPRequestHandler



with socketserver.TCPServer(("", PORT), Handler) as httpd:

    print("serving at port", PORT)

    httpd.serve_forever()

 

Просто так у нас есть функциональный http-сервер.

Теперь давайте разберем этот код построчно.

Во-первых, как мы упоминали ранее, веб-сервер — это процесс, который прослушивает входящие запросы на определенный TCP-адрес.

И, как вы уже знаете, TCP-адрес идентифицируется по IP-адресу и номеру порта.

Во-вторых, веб-сервер также должен знать, как обрабатывать входящие запросы.

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

Конечно, эти обработчики могут делать все что угодно.

Но что вы думаете, какой самый основной обработчик?

Ну, это будет обработчик, который просто обслуживает статический файл.

Другими словами, когда мы заходим на yandex.ru, веб-сервер на другом конце отправляет обратно статический HTML-файл.

Это на самом деле то, что мы пытаемся сделать.

И это, и есть то, что является http.server.SimpleHTTPRequestHandler : простой обработчик HTTP-запросов, который обслуживает файлы из текущего каталога и любых его подкаталогов.

 

Класс socketserver.TCPServer

Теперь поговорим о классе socketserver.TCPServer.

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

Чтобы создать экземпляр TCP-сервера, нам нужны две вещи:

  1. TCP-адрес (IP-адрес и номер порта)
  2. Обработчик

 

socketserver.TCPServer(("", PORT), Handler)

 

Как видите, TCP-адрес передается в виде кортежа (IP-адрес, номер порта)

Передача пустой строки в качестве IP-адреса означает, что сервер будет прослушивать любой сетевой интерфейс (все доступные IP-адреса).

А поскольку PORT хранит значение 8080, сервер будет прослушивать входящие запросы на этот порт.

Для обработчика мы передаем простой обработчик, о котором мы говорили ранее.

Handler = http.server.SimpleHTTPRequestHandler

 

Ну, а как насчет serve_forever?

serve_forever — это метод в экземпляре TCPServer, который запускает сервер и начинает прослушивать и отвечать на входящие запросы.

Круто, давайте сохраним этот файл как server.py в том же каталоге, что и index.html, потому что по умолчанию SimpleHTTPRequestHandler будет искать файл с именем index.html в текущем каталоге.

В этом каталоге запустите веб-сервер:

$ python server.py

serving at port 8080

 

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

Пришло время для забавных вещей!

Откройте браузер и введите localhost:8080 в адресной строке.

Потрясающие! Похоже, все работает нормально.

Но что такое localhost ?

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

А поскольку веб-сервер прослушивает любой интерфейс, он также прослушивает интерфейс обратной связи.

Вы хотите знать, какой IP-адрес соответствует localhost?

Введите следующее:

$ host localhost

localhost has address 127.0.0.1

localhost has IPv6 address ::1

Host localhost not found: 3(NXDOMAIN)

 

Фактически вы можете полностью заменить localhost на 127.0.0.1 в вашем браузере, и вы все равно получите тот же результат.

 

Одно последнее слово

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

Просто зайдите в свой терминал и сделайте следующее (но убедитесь, что вы на Python 3)

python -m http.server 8080

 

По умолчанию этот сервер будет прослушивать все интерфейсы и порт 8080.

Если вы хотите прослушать определенный интерфейс, сделайте следующее:

python -m http.server 8080 --bind 127.0.0.1

 

Также начиная с Python 3.7, вы можете использовать флаг –directory для обслуживания файлов из каталога, который не обязательно является текущим каталогом.

Таким образом, теперь возникает вопрос: зачем вам когда-либо писать сценарий, когда вы можете просто вызывать сервер из терминала?

Хорошо, помните, что вы используете  SimpleHTTPRequestHandler. Если вы хотите создать свои собственные обработчики (что вы, вероятно, захотите), то вы не сможете сделать это из терминала.



2020-06-05T15:50:58
Python 3

IP геолокация

Развитие геолокационных технологий позволило нам находить объекты с помощью интернета. Будь то поиск вашего потерянного питомца с помощью встроенного GPS-ошейника или поиск вашего любимого ресторана, геолокация стала обязательной технологией для повседневной жизни. Кроме того, технология развивалась и в настоящее время используется в более широких масштабах предприятиями для выявления и определения целевых потребителей на основе местоположения. Однако, прежде чем мы углубимся в основные аспекты этой технологии, давайте разберем ее.

 

Что такое геолокация IP?

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

Дополнительная информация о IP Геолокации

Насколько точна IP-геолокация?

IP-геолокация стала важной технологией, когда речь заходит о сопоставлении IP-адресов с географическими местоположениями (континентом, страной, штатом/провинцией и городом, а также дополнительной информацией, такой как почтовый/почтовый индекс, часовой пояс и код города и другие). Однако его точность зависит от базы данных, используемой поставщиком услуг. Большинство поставщиков утверждают, что они обеспечивают точность 98-99% для базы данных IP-to-country. Однако точность базы данных IP2country считается около 95%. Точность IP-to-City оценивается где-то между 50% и 70%, в то время как точность IP-to-Region составляет около 50%, поскольку нет никакого официального источника данных IP2Region.

 

Для чего используется геолокация IP?

Преимущества геолокации IP являются далеко идущими и используются организациями из всех секторов, включая производство, страхование, банковский транспорт, правительства и коммунальные службы, в частности. Определяя местоположение своих потребителей, компании создают более целенаправленные и персонализированные объявления, а также предоставляют более специализированные продукты и услуги. В партнерстве с кросс-платформенными мобильными приложениями IP geolocation предлагает основу для расширенного и персонализированного опыта. Он также позволяет организациям использовать данные о местоположении, социальные сети и другие платформы для предоставления услуг, обогащенных контекстом.

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

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

 

Можно ли отследить поддельный IP-адрес?

Так как есть много способов, в которых пользователи могут использовать поддельные IP-адреса, есть подслушивающий вопрос о том, можно ли их все еще отслеживать. Наш ответ-да. Даже если вы подделываете свой IP-адрес с помощью дополнительных служб, они будут сопоставлены с местоположением, предоставляемым используемой службой. это происходит, когда инструмент, который вы используете, заставляет других думать, что вы получаете доступ в интернет с помощью другого IP, в другой стране. Однако при дополнительном поиске адрес может быть помечен как поддельный.

 

Как поставщики услуг геолокации IP собирают данные?

Геолокационные службы могут похвастаться доступом к обширным базам данных, которые предоставляют им необходимую информацию, необходимую для поиска кого-то с помощью IP-адресов. Инструмент seolik.ru — Информация об IP адресе, вы узнаете пожробную информацию об IP адресе. Однако их источники данных включают:

 

Региональные интернет-реестры (RIR)

Это крупные организации, которым поручена роль управления и контроля доступа к интернету в различных регионах. RIR отвечает за назначение и распределение IP-адресов, а также регистрацию доменов. В связи с быстрым ростом интернета и тем фактом, что каждый компьютер нуждается в IP для подключения к интернету, спрос на IP-адреса вырос, что вынуждает Рир иметь дочерние реестры в различных регионах. Поскольку региональные интернет-реестры являются хранителями IP-адресов, они являются основным источником данных для поставщиков услуг геолокации.

 

Интернет-Провайдеры (Интернет-провайдеры)

Поставщики услуг интернета (ISP) также могут быть источником данных для баз данных, используемых поставщиками услуг IP-геолокации. Поскольку интернет-провайдеры прекрасно знают свои IP-адреса, они иногда обмениваются информацией с другими онлайн-компаниями. Компании, в свою очередь, могут использовать статистические формулы и другие продвинутые аналитические инструменты для анализа данных, собранных IPS, когда мы занимаемся своей обычной онлайн-деятельностью. Используя такие данные, поставщики услуг могут точно настроить свой поиск и получить более точные местоположения.

 

Данные, представленные пользователем привязаны к IP-адресам

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

 

IP парсинги

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

  • IP Info — Получение сведений о местоположении по IP-адресу. В зависимости от конкретного IP-адреса вы можете определить страну, регион, город, долготу и широту адреса. Наша высококачественная база данных геолокационных данных постоянно обновляется по мере изменения распределения адресов в интернете (как правило, база данных обновляется не реже одного раза в месяц). Этот API также может быть использован для выполнения обратных DNS-запросов (PTR).



2020-06-05T14:38:44
Сети

Как установить Visual Studio Code в Linux

Если вы разработчик, которому требуется использование Linux, такого как Ubuntu , для работы из дома, теперь вы можете установить Microsoft Visual Studio Code (VS Code) в качестве облегченного редактора кода.

Редактор VS Code включает в себя поддержку Node.js, JavaScript, TypeScript и поддержку, которая может быть расширена на многие другие языки, включая PHP, Python, Go, Java, C # и C ++. Кроме того, вы также можете установить расширения для сред выполнения, таких как Unity и .NET.

В этом руководстве вы узнаете, как установить VS Code в Linux с помощью графического интерфейса пользователя и терминала.

Как установить код Visual Studio с помощью графического интерфейса в Ubuntu

Чтобы загрузить и установить код Visual Studio, выполните следующие действия.

  1. Откройте кодовую страницу Visual Studio.
  2. Нажмите кнопку .deb , чтобы загрузить установщик Ubuntu.

  3. Сохраните файл на свое устройство.
  4. Дважды щелкните файл *.deb, чтобы запустить программу установки.

  5. Нажмите кнопку Установить.

После того как вы выполните эти шаги, Visual Studio Code будет установлен, и он будет доступен в меню «Приложения».

Как установить код Visual Studio с помощью Snap в Ubuntu

Snap — это магазин, который официально поддерживает распространение кода Visual Studio.

Чтобы установить VS Code с Snap, выполните следующие действия:

  1. Откройте Терминал.
  2. Введите следующую команду для установки кода Visual Studio в Linux и нажмите Enter :
    sudo snap install --classic code

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

Как установить код Visual Studio с помощью apt-get в Ubuntu

Чтобы установить VS Code с помощью команды терминала, выполните следующие действия:

  1. Откройте Терминал.
  2. Введите следующую команду и нажмите Enter:
    sudo apt-get update

  3. Введите следующую команду и нажмите Enter :
    sudo apt install software-properties-common apt-transport-https wget

  4. Введите следующую команду для импорта ключа Microsoft GPC и нажмите Enter:
    wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add –

  5. Введите следующую команду, чтобы включить репозиторий VS Code, и нажмите Enter :
    sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main"

  6. Введите следующую команду для установки кода Visual Studio и нажмите Enter :
    sudo apt-get install code

После выполнения этих действий код Visual Studio будет установлен на вашем устройстве. Если доступно новое обновление, вы сможете обновить его с помощью диспетчера обновлений программного обеспечения Ubuntu или можете воспользоваться sudo apt update следующей sudo apt upgrade.



2020-06-05T09:21:23
Вопросы читателей

Avast 2020. Краткий обзор антивируса

Это обзор Avast 2020 — бесплатная версия антивируса от Avast и его последнее обновление за последний год. Avast Free Antivirus предоставляет пользователям оперативную защиту от вирусов-вымогателей, возможность совершать безопасные онлайн-платежи без дополнительной нагрузки на операционную систему.

Интересным продуктом является защита Интернета: он поддерживает до 10 устройств, имеет VPN и обеспечивает защиту от любых угроз в Интернете, включая различные фальшивые сайты и вымогателей. Пробная версия работает в течение 30 дней.

 

Последние соответствующие свойства

  • Полностью переработанный пользовательский интерфейс.
  • Новый проактивный компонент Behavior Screen, который Avast унаследовал от AVG.
  • Режим игры, автоматически оценивающий производительность игры, приостанавливающий все ненужные уведомления и процессы во время игры.
  • Бесплатная версия антивируса после активации больше не требует адреса электронной почты.
  • Улучшение производительности.
  • Улучшенный инспектор Wi-Fi, ранее называвшийся домашней сетью безопасности.
  • Улучшен интерфейс и интеграция браузера компонента Пароли.
  • Защита от фишинга теперь работает без расширения браузера
  • Улучшено обнаружение угроз
  • Карантин перемещен на вкладку Защита
  • Оптимизация для процессоров AMD Ryzen
  • Добавлена поддержка кредитных карт в модуле Пароли

На сайте http://skachatavast.ru/ вы можете аваст скачать бесплатно. Avast Free Antivirus – бесплатный надежный защитник компьютера, домашней сети, а также данных имеющий все необходимые функции.

 

Настройка антивируса

Теперь давайте рассмотрим важные настройки Avast 2017 Free. В главном окне программы нажмите «Настройки» (без меня вы бы не догадались).

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

  • Вкладка «Общие» Установите флажок «Поиск потенциально нежелательных программ».
  • Здесь мы переходим к пункту «Конфиденциальность», открываем его и снимаем хотя бы вторую галочку.
  • «Участвуйте в предоставлении данных».
  • «Компоненты» — «Экран файловой системы» — «Настройки» — «Сканирование при открытии». Если у вас достаточно мощный компьютер и достаточно сильная паранойя, установите флажок «Сканировать все файлы».
  • «Компоненты» — «Веб-экран» — «Настройки» — «Основные настройки». Установите флажок «Предупредить меня при загрузке файлов с плохой репутацией». На вкладке «Чувствительность» увеличьте эвристику до «Высокая».

Расширенные настройки для начинающих

  • Вкладка «Общие», включите «Расширенный режим». Хотя умеренный, даже агрессивный.
  • «Компоненты» — «Экран поведения» — «Настройки» — «Основные настройки». Мы ставим «Автоматически перемещать обнаруженные угрозы в карантин».

 

Преимущества и недостатки

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

Новая версия Avast Free также имеет недостатки. Во-первых, это ошибка даже на уровне графической оболочки: главное окно загружается долго, иногда помощь вообще не загружается, после чего окно антивируса обычно зависает.

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



2020-06-04T15:10:47
Программное обеспечение

Как включить SSH в Ubuntu 20.04

Secure Shell (SSH) — это сетевой протокол, используемый для безопасного соединения между клиентом и сервером. Каждое взаимодействие между сервером и клиентом шифруется.

В этой статье объясняется, как включить SSH на компьютере с Ubuntu.

Включение SSH позволит вам удаленно подключаться к вашей системе и выполнять административные задачи. Вы также сможете безопасно передавать файлы через scp и sftp. Читать

Сортировка списка в Python

Сортировка данных — одна из самых распространенных задач при работе с Python. Например, вы можете отсортировать список членов команды по имени или список проектов в порядке приоритета.

В этой статье описывается, как сортировать списки в Python.

 

Sort() и sorted() в Python

В Python вы можете отсортировать список, используя встроенный метод list.sort() или встроенную функцию sorted().

Функция sorted() создает новый отсортированный список, в то время как метод list.sort() сортирует список на месте. Если вы хотите сохранить, несортированный список использовать функцию sorted(). Другое отличие состоит в том, что функция sorted() работает с любым повторяемым объектом.

Синтаксис sort()и sorted()следующий:

list.sort(key=function, reverse=Boolean)


 

sorted(iterable, key=function, reverse=Boolean)


 

Необязательные ключевые аргументы key и reverse имеют следующее значение:

  • key — Функция, которая принимает один аргумент и преобразует его перед сравнением. Функция должна возвращать одно значение, которое используется для сравнения сортировки.
  • reverse — Значение реверса может быть либо либо, True либо False. Значением по умолчанию является True. Когда для этого аргумента установлено значение false, список сортируется в обратном порядке.

Элементы списка сравниваются с помощью оператора < (меньше чем) и сортируются по возрастанию. Оператор < не поддерживает сравнения строки в целое число, так что если у вас есть список , содержащие строки и целые числа, то операция сортировки не удастся.

В следующем примере показано, как отсортировать список строк в алфавитном порядке:

directions = ["north", "east", "south", "west"] 



directions.sort()



print('Sorted list:', directions)


 

Sorted list: ['east', 'north', 'south', 'west']


 

Если вы хотите сохранить исходный список без изменений, используйте функцию sorted():

directions = ["north", "east", "south", "west"] 



sorted_directions = sorted(directions)



print('Sorted list:', sorted_directions)


 

Sorted list: ['east', 'north', 'south', 'west']


 

Чтобы отсортировать список в обратном (нисходящем) порядке, установите аргумент reverse в True:

directions = ["north", "east", "south", "west"] 



directions.sort(reverse=True)



print('Sorted list:', directions)


 

Sorted list: ['west', 'south', 'north', 'east']


 

Сортировка с функцией

Аргумент key принимает функцию и позволяет выполнять более сложные операции сортировки.

Самый простой пример — сортировка элементов по длине:

directions = ["Destroyer", "Alex", "AndreyEx", "Max"] 



directions.sort(key=len)



print('Sorted list:', directions)


 

Мы используем функцию len(), чтобы вернуть количество символов в строке, которая используется в качестве компаратора:

Sorted list: ['AndreyEx', 'Destroyer', 'Max', 'Alex']


 

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

def sum_digits(num): 

    digits = [int(x) for x in str(num)] 

    return sum(digits) 

      

numbers = [23, 77, 19, 310, 219] 



numbers.sort(reverse=True, key=sum_digits)



print('Sorted list:', numbers)


Sorted list: [77, 219, 19, 23, 310]


 

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

numbers = [(3, 14), (1, 61), (2, 71)]



numbers.sort(key=lambda k: k[0])



print('Sorted list:', numbers)


 

Мы используем анонимную (лямбда) функцию, которая возвращает первый элемент кортежа. Список отсортирован по значению, возвращенному функцией:

Sorted list: [(1, 61), (2, 71), (3, 14)]


 

Тот же подход можно использовать для сортировки списка словарей:

elements = [

    {'name': 'Germanium', 'number': 25, 'symbol': 'ge'},

    {'name': 'Silver', 'number': 47, 'symbol': 'ag'},

    {'name': 'Iron', 'number': 26, 'symbol': 'fe'},

]



elements.sort(key=lambda k: k['name'])



print('Sorted list:', elements)


 

Лямбда-функция возвращает значение nameключа, которое используется для сравнения:

Sorted list: [

    {'name': 'Germanium', 'number': 25, 'symbol': 'ge'}, 

    {'name': 'Iron', 'number': 26, 'symbol': 'fe'}, 

    {'name': 'Silver', 'number': 47, 'symbol': 'ag'}

]


 

Лучший и более быстрый способ сортировки сложной функции — использовать функции модуля «Оператор». Вот пример:

from operator import itemgetter



elements = [

    {'name': 'Germanium', 'number': 25, 'symbol': 'ge'},

    {'name': 'Silver', 'number': 47, 'symbol': 'ag'},

    {'name': 'Iron', 'number': 26, 'symbol': 'fe'},

]



elements.sort(key=itemgetter('symbol')) 



print('Sorted list:', elements)


 

Функция itemgetter считывает значение ключа symbol:

Sorted list: [

    {'name': 'Silver', 'number': 47, 'symbol': 'ag'},

    {'name': 'Iron', 'number': 26, 'symbol': 'fe'},

    {'name': 'Germanium', 'number': 25, 'symbol': 'ge'}

]


 

Вывод

Мы показали вам, как сортировать списки в Python, используя метод sort() и функцию sorted().

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.



2020-06-04T12:54:49
Python