Архив метки: Python

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

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

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

Python sort() и sorted()

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

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

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

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

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

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

  • key — функция, которая принимает один аргумент и преобразует его перед сравнением. Функция должна возвращать одно значение, которое используется для сравнения сортировки.
  • reverse — значение 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 = ["Arya", "Daenerys", "Jon", "Brienne"] 

directions.sort(key=len)

print('Sorted list:', directions)

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

Sorted list: ['Jon', 'Arya', 'Brienne', 'Daenerys']

Вы также можете создать пользовательскую функцию и использовать ее в качестве 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-10-03T19:12:02
Python

Как найти длину списка в Python

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

В этой статье показано, как определить длину списка.

 

Функция len()

Python имеет встроенную функцию len(), которая возвращает длину заданного объекта. Объектом может быть список, кортеж, строка, словарь и т. д.

Синтаксис функции len() следующий:

len(list)


 

Функция принимает только один аргумент. Возвращаемое значение — целое число, которое представляет собой количество элементов в списке.

Вот пример:

cities = ['Krasnodar', 'Moscow', 'Ekaterinburg', 'Rostov']



list_len = len(cities)



print("The list has {0} elements.".format(list_len))


 

The list has 4 elements.


 

Использование цикла

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

Ниже приведен пример кода, который показывает, как с помощью цикла for найти количество элементов в заданном списке :

cities = ['Krasnodar', 'Moscow', 'Ekaterinburg', 'Rostov']

counter = 0



for capital in cities:

  counter = counter + 1



print("The list has {0} elements.".format(counter))


 

The list has 4 elements.


 

Этот метод не очень питонический. Вы всегда должны предпочесть использовать функцию len().

 

Вывод

Чтобы узнать длину списка в списке Python, используйте функцию len().

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



2020-09-29T09:29:17
Python

Обратный список в Python

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

В Python есть несколько разных способов перевернуть список, в зависимости от того, что вы пытаетесь сделать.

 

Метод reverse()

reverse() — это метод типа данных списка, который меняет местами элементы списка. Этот метод изменяет исходный список, а не создает новый.

Синтаксис метода reverse() следующий:

list.reverse()


 

reverse() не принимает аргументы.

 

Вот пример:

capitals = ['Краснодар', 'Москва', 'Ростов', 'Минск']



capitals.reverse()



print('Обратный список:', capitals)


Обратный список: ['Минск', 'Ростов', 'Москва', 'Краснодар']


 

Функция reversed()

reversed() — это встроенная функция Python, которая возвращает обратный итератор заданного итеративного объекта. Исходный список не изменяется.

Если вы хотите перебирать элементы списка только в обратном порядке, предпочтительнее использовать функцию reversed(), так как она быстрее, чем перестановка элементов на месте`.

Синтаксис функции reversed() следующий:

reversed(seq) 


 

Где seq находится список, который нужно вернуть?

Ниже приведен пример использования цикла reversed() по элементам списка в обратном порядке:

numbers = [1, 2, 3, 4]



for i in reversed(numbers) :

    print(i)


 

4

3

2

1


 

Если вы хотите преобразовать обратный итератор в список, используйте конструктор list():

numbers = [1, 2, 3, 4]



print(list(reversed(numbers)))


 

[4, 3, 2, 1]


 

Перевернуть список с помощью нарезки

Нотация среза — это встроенная функция Python, которая позволяет извлекать части последовательного типа данных. Хотя это и не очень Pythonic, вы можете использовать нотацию [::-1], перевернув список:

numbers = [1, 2, 3, 4]



print(numbers[::-1])


 

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

[4, 3, 2, 1]


 

Вывод

Чтобы перевернуть список Python на месте, используйте метод reverse(). Если вам нужно создать только обратный итератор, используйте функцию reversed().

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



2020-08-26T11:05:59
Python

Функция map() в Python

map() это встроенная функция в Python, которая применяет функцию ко всем элементам в теле цикла. Это позволяет писать простой и чистый код без использования циклов.

 

Функция map() в Python

Функция map() принимает следующий вид:

map(function, iterable, ...)


 

Она принимает два обязательных аргумента:

  • function — Функция, которая вызывается для каждого элемента iterable.
  • iterable — Один или несколько объектов, поддерживающих итерацию. Большинство встроенных в Python объектов, таких как списки, словари и кортежи, являются итеративными.

В Python 3 map() возвращает объект карты с размером, равным переданному итерируемому объекту. В python 2 функция возвращает список.

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

Один из способов сделать это — использовать традиционный цикл for:

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

directions_upper = []



for direction in directions:

    d = direction.upper()

    directions_upper.append(d)



print(directions_upper)


 

['NORTH', 'EAST', 'SOUTH', 'WEST']


 

С функцией map() код будет намного проще и более гибким.

def to_upper_case(s):

    return s.upper()



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



directions_upper = map(to_upper_case, directions)



print(list(directions_upper))


 

Мы используем функцию list() для преобразования возвращенного объекта карты в список :

['NORTH', 'EAST', 'SOUTH', 'WEST']


 

Если функция обратного вызова проста, более лучший способ заключается в использовании лямбда-функции:

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



directions_upper = map(lambda s: s.upper(), directions)



print(list(directions_upper))


 

Лямбда-функция — это небольшая анонимная функция.

Вот еще один пример, показывающий, как создать список квадратных чисел от 1 до 10:

squares = map(lambda n: n*n , range(1, 11))

print(list(squares))


 

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]


 

Функция range() генерирует последовательность целых чисел.

 

Использование map() с несколькими итерациями

Вы можете передать в функцию столько итераций, сколько захотите map(). Количество обязательных входных аргументов, которые принимает функция обратного вызова, должно быть таким же, как количество итерируемых элементов.

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

def multiply(x, y):

  return x * y



a = [1, 4, 6]

b = [2, 3, 5]



result = map(multiply, a, b)



print(list(result))


[2, 12, 30]


 

Тот же код, но с использованием лямбда-функции будет выглядеть так:

a = [1, 4, 6]

b = [2, 3, 5]



result = map(lambda x, y: x*y, a, b)



print(list(result))


 

Когда предоставляется несколько итераций, размер возвращаемого объекта равен самой короткой итерации.

Давайте посмотрим на пример, когда итерации не имеют одинаковую длину:

a = [1, 4, 6]

b = [2, 3, 5, 7, 8]



result = map(lambda x, y: x*y, a, b)



print(list(result))


 

Избыточные элементы (7 и 8) игнорируются:

[2, 12, 30]


 

Вывод

Функция Python map() принимает итеративный объект вместе с функцией и применяет эту функцию к каждому итерируемого элементу.

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



2020-07-13T12:40:10
Python

Как комментировать в Python

При написании кода на Python всегда полезно делать код легко читаемым. Организация кода, присвоение переменным и функциям описательных имен — это несколько способов сделать это.

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

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

Комментарии должны быть краткими и точными. Не объясняйте что-то очевидное для читателя.

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

 

Написание комментариев в Python

Python игнорирует все, что написано в строке после хеш-метки (#).

Комментарии могут быть добавлены в начале строки или встроены в другой код:

# Это комментарий Python.

print("Привет Мир") # Это встроенный комментарий Python.


Пробел после хеш-метки не обязателен, но он улучшит читабельность комментария.

Символ хеша внутри строкового литерала не указывает на начало строки комментария. Это просто хэш-символ:

paragraph = "# Хэш внутри кавычек-это не комментарий."



Комментарии должны быть на том же уровне отступа, что и код под ними:



```py

def factorial(n):

  if n == 0:

    return 1

  else:

    # Используйте функцию факториала

    return n * factorial(n-1)


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

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

# for fruit in fruits:

#   print(fruit)


Многострочные комментарии в Python (блоки комментариев)

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

Самый простой способ написать многострочные комментарии в Python — добавить однострочные комментарии один за другим:

# Это первая строка.

# Это вторая строка.


Другой вариант — использовать строки документации.

Строки документации — это многострочные строковые литералы, которые используются для документирования того, что делает модуль, функция, класс или метод.

Строка документа начинается и заканчивается тройными двойными кавычками ( «»») и может занимать одну или несколько строк:

"""Это 

многострочная строка 

документа.

"""


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

 

Python

Если вы читаете скрипты Python, вы можете заметить, что в некоторых из них первая строка начинается с символов #! и пути к интерпретатору Python:

#!/usr/bin/env python3


Эта последовательность символов вызывается shebang и используется для указания операционной системе, какой интерпретатор использовать для анализа остальной части файла. Скрипты, которые начинаются с shebang и являются исполняемыми, могут запускаться в терминале без ввода python перед именем скрипта.

Поскольку строка shebang начинается с символа хеша, она рассматривается как комментарий и автоматически игнорируется интерпретатором Python.

 

Вывод

Написание комментариев является хорошей практикой и помогает другим разработчикам, в том числе будущим, понять, что делает код. В Python все после хеш-метки ( #) и до конца строки считается комментарием.

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



2020-07-01T13:13:07
Python

Разбор данных JSON в Python

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

 

Python JSON

Модуль json позволяет кодировать и декодировать данные JSON является частью стандартной библиотеки Python.

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

Ниже приведена таблица, показывающая объекты Python и их эквивалентное представление JSON:











PythonJSON
dictobject
list, tuplearray
strstring
int, floatnumber
Truetrue
Falsefalse
Nonenull

 

Для работы с JSON просто импортируйте модуль вверху файла:

import json


 

Кодировка JSON в Python

Модуль json имеет два метода для кодирования объектов Python в JSON отформатированных строк: dump() и dumps().

Метод dump() отправляет вывод в файл-подобный объект. Он принимает два позиционных аргумента: объект, который должен быть закодирован, и объект в виде файла. Вот пример:

data = {

    "country": "Russia",

    "vehicle": {

        "name": "Volkswagen",

        "model": "T-Roc"

    }

}



with open("file.json", "w") as file:

    json.dump(data, file)


 

Если вы запустите скрипт, он создаст файл с именем file.json:

file.json

{"country": "Russia", "vehicle": {"name": "Volkswagen", "model": "T-Roc"}}


 

Метод dumps() работает так же, как и dump(), но вместо того, чтобы послать вывод в файл-подобный объект, он возвращает строку:

data = {

    "country": "Russia",

    "vehicle": {

        "name": "Volkswagen",

        "model": "T-Roc"

    }

}



json.dumps(data)


 

'{"country": "Russia", "vehicle": {"name": "Volkswagen", "model": "T-Roc"}}'


 

Оба метода принимают одинаковые ключевые аргументы. Например, если вы анализируете или отлаживаете данные JSON, вы можете указать уровень отступа:

data = {

    "country": "Russia",

    "vehicle": {

        "name": "Volkswagen",

        "model": "T-Roc"

    }

}



print(json.dumps(data, indent=2))


 

{

  "country": "Russia",

  "vehicle": {

    "name": "Volkswagen",

    "model": "T-Roc"

  }

}


 

Расшифровка JSON в Python

Для того, чтобы преобразовать JSON закодированные данные в объекты Python, использовать методы load() и loads().

Метод load() считывает структуру JSON из файла типа объекта и преобразует его в объект Python.

Допустим, у нас есть следующий файл JSON:

file.json

[

  {

    "userId": 1,

    "id": 1,

    "title": "Meet with Lisa",

    "completed": true

  },

  {

    "userId": 1,

    "id": 2,

    "title": "Design a prototype",

    "completed": false

  }

]


 

Чтобы преобразовать данные JSON в представление Python, вы должны использовать что-то вроде этого:

import json



with open('file.json') as f:

  data = json.load(f)



type(data)


 

JSON преобразуется в список Python, который вы можете использовать в своем коде:

<class 'list'>


 

Метод loads() преобразует строку, содержащую документ JSON на объект Python:

import json



json_str= '{"userId": "1", "id": "1", "title": "Meet with Lisa", "completed": "True"}'



print(json.loads(json_str))


 

Строка преобразуется в словарь Python:

{'userId': '1', 'id': '1', 'title': 'Meet with Lisa', 'completed': 'True'}


 

Вот более сложный пример, который показывает, как сделать запрос API и декодировать данные JSON:

import json

import requests



response = requests.get("https://jsonplaceholder.typicode.com/users")

users = json.loads(response.text)



print(users)


 

Вывод

Мы рассказали вам, как кодировать и декодировать данные JSON в Python.

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



2020-06-29T10:06:00
Python