Содержание:
- 1 Как списки и другие последовательности сравниваются в Python?
- 2 Что такое лексикографическая сортировка?
- 3 Что происходит в этом случае min ?
- 4 Что делать, если в списке есть несколько минимальных элементов?
- 5 Что мне нужно сделать для предотвращения лексикографического сравнения в min ?
- 6 Что делать, если список неоднороден?
- 7 Встроенные функции, выполняющие преобразование типов
Предположим, что есть вложенный список, например:
При вызове функции min() :
Почему и как это работает? Каковы некоторые его варианты использования?
Как списки и другие последовательности сравниваются в Python?
Списки (и другие последовательности) в Python сравниваются лексикографически и не основаны ни на каком другом параметре.
Объекты последовательности могут сравниваться с другими объектами с тем же типом последовательности. Сравнение использует лексикографическое упорядочение: сначала сравниваются первые два элемента, и если они отличаются друг от друга, это определяет результат сравнения; если они равны, сравниваются следующие два элемента и так далее, пока не будет исчерпана любая последовательность.
Что такое лексикографическая сортировка?
лексикографический или лексикографический порядок (также известный как лексический порядок, словарьный порядок, алфавитный порядок или лексикографический (al) продукт) является обобщением того, как алфавитный порядок слов основан на алфавитном порядке их составляющих букв.
Функция min возвращает наименьшее значение в iterable. Таким образом, лексикографическое значение [1,2] является наименьшим в этом списке. Вы можете проверить, используя [1,2,21]
Что происходит в этом случае min ?
Переход на элемент my_list , во-первых, [1,2,21] и [1,3] . Теперь из документов
Если два элемента, которые нужно сравнить, сами являются последовательностями одного и того же типа , лексикографическое сравнение выполняется рекурсивно .
Таким образом, значение [1,1,21] меньше [1,3] , потому что второй элемент [1,3] , который равен 3 , лексикографически выше значения второго элемента [1,1,21] , который, 1 .
Теперь сравниваем [1,2] и [1,2,21] и добавляем еще одну ссылку из документов
Если одна последовательность представляет собой начальную подпоследовательность другой, более короткая последовательность представляет собой меньшую (меньшую).
[1,2] — начальная подпоследовательность [1,2,21] . Поэтому значение [1,2] в целом меньше, чем значение [1,2,21] . Следовательно, в качестве вывода возвращается [1,2] .
Это можно проверить с помощью функции sorted
Что делать, если в списке есть несколько минимальных элементов?
Если список содержит повторяющиеся минимальные элементы, возвращается первый
Это можно подтвердить, используя вызов функции id
Что мне нужно сделать для предотвращения лексикографического сравнения в min ?
Если требуемое сравнение не является лексикографическим, можно использовать аргумент key (как указано Padraic)
Функция min имеет дополнительный необязательный аргумент key . Аргумент key принимает функцию.
Необязательный ключевой аргумент указывает функцию упорядочения с одним аргументом как и для list.sort() . Ключевой аргумент, если он поставлен, должен быть в форме ключевого слова (например, min(a,b,c,key=func) ).
Например, если нам нужен наименьший элемент по длине, нам нужно использовать функцию len .
Как мы видим, здесь возвращается первый самый короткий элемент.
Что делать, если список неоднороден?
Если список является гетерогенным , имена типов рассматриваются для заказа, проверьте Сравнения,
Объекты разных типов, кроме чисел, упорядочиваются по именам типов
Следовательно, если вы поместите int и list , вы получите целочисленное значение как наименьшее, так как i имеет меньшее значение, чем l . Аналогично ‘1’ будет иметь более высокую ценность, чем обе эти.
Python3 и далее
Однако эта запутанная техника была удалена в Python3. Теперь он вызывает TypeError . Прочитайте Что нового в Python 3.0
Операторы сравнения порядка ( , , >= , > ) создают исключение TypeError , когда операнды не имеют значимого естественного упорядочения. Таким образом, выражения типа 1 , 0 > None или len более недействительны и, например, None вызывает TypeError вместо возврата False . Следствием является то, что сортировка гетерогенного списка больше не имеет смысла — все элементы должны быть сопоставимы друг с другом .
Но он работает для типов Comparable, например
Здесь мы видим, что list содержит значения float и int . Но поскольку float и int являются сопоставимыми типами, в этом случае работает функция min .
Давайте посмотрим на некоторые интересные факты о функциях min () и max (). Эти функции используются для вычисления максимума и минимума значений, передаваемых в его аргументе, и лексикографически наибольшего значения и лексикографически наименьшего значения соответственно, если строки передаются в качестве аргументов.
ссылка на сайт
brightness_4
код
Здесь вы заметили, что вывод происходит в соответствии с лексикографическим порядком. Таким образом, мы можем найти вывод в соответствии с длиной строки или требованием, просто передавая имя функции или лямбда-выражение.
Синтаксис: max(x1, x2, . xn, key=function_name)
здесь x1, x2, x3 . xn передали аргументы
имя_функции : обозначает, какой тип операции вы хотите выполнить с этими аргументами. Пусть function_name = len, так что теперь вывод дает в соответствии с длиной x1, x2 . xn.
Краткий обзор встроенных функций в Python 3.
Встроенные функции, выполняющие преобразование типов
bool(x) — преобразование к типу bool, использующая стандартную процедуру проверки истинности. Если х является ложным или опущен, возвращает значение False, в противном случае она возвращает True.
bytearray([источник [, кодировка [ошибки]]]) — преобразование к bytearray. Bytearray — изменяемая последовательность целых чисел в диапазоне 0≤X