Добавление функций сравнения Python

dobavlenie funkcij sravneniya python Структуры данных

Поскольку функцию можно передавать в качестве аргумента, как любой другой объект, легко предусмотреть передачу дополнительной функции сравнения. В следующей версии, в примере 18.26, второй аргумент принимает функцию, которая возвращает значение true, если ее первый аргумент должен быть помещен перед вторым. По умолчанию используется lambda-выражение, обеспечивающее порядок по возрастанию. Кроме того, эта функция сортировки возвращает новую последовательность того же типа, что и переданная ей, применяя такую же технику извлечения срезов, как в инструментах обращения последовательностей — если сортируется кортеж узлов, назад тоже возвращается кортеж.

Пример 18.26. PP4E\Dstruct\Classics\sort2.py

def sort(seq, func=(lambda x,y: x <= y)): # по умолчанию: по возрастанию res = seq[:0] # возвращает послед. того же типа

for j in range(len(seq)):

i = 0

for y in res:

if func(seq[j], y): break

i += 1

res = res[:i] + seq[j:j+1] + res[i:] # послед. может быть

# неизменяемой

return res

if __name__ == ‘__main__’:

table = ({‘name’:’doe’}, {‘name’:’john’})

print(sort(list(table), (lambda x, y: x[‘name’] > y[‘name’]))) print(sort(tuple(table), (lambda x, y: x[‘name’] <= y[‘name’]))) print(sort(‘axbyzc’))

На этот раз записи в таблице упорядочиваются с помощью переданной функции сравнения полей:

C:\\PP4E\Dstruct\Classics> python sort2.py

[{‘name’: ‘john’}, {‘name’: ‘doe’}] ({‘name’: ‘doe’}, {‘name’: ‘john’}) abcxyz

Эта версия обходится вообще без понятия поля и позволяет переданной функции при необходимости работать с индексами. В результате данная версия становится еще более универсальной, например ее также можно использовать для сортировки строк.

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий