Как стать автором
Обновить

Как работают min() и max() со строками в Python

Уровень сложностиСредний

Функции min() и max() в Python могут использоваться для работы со строками, сравнивая их символы в лексикографическом порядке. Этот порядок соответствует последовательности символов в таблице Unicode.

✔️ Что такое Unicode?

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

Изучить таблицу Unicode, вы можете тут или тут.

Чтобы понять, как работают min() и max() со строками, нужно знать порядок символов в таблице Unicode. Вот общий порядок:

  • Пробел и специальные символы: !, », #, $, %, &, ', (, ), *, +,, , ., /

  • Цифры (0-9)

  • Специальные символы: ;, <, =, >, ?, @

  • Заглавные латинские буквы (A-Z)

  • Специальные символы: [, \, ], ^, _, `

  • Строчные латинские буквы (a-z)

  • Специальные символы: {, |, }, ~

  • Заглавные русские буквы (А-Я)

  • Строчные русские буквы (а-я)

  • Эмодзи и другие символы

Пример:

print(ord('A'))  # Вывод: 65 (код латинской буквы 'A')
print(ord('Я'))  # Вывод: 1071 (код кириллической буквы 'Я')
print(ord('❤️')) # Вывод: 10084 (код эмодзи "сердце")

✔️ Примеры работы с min() и max()

1. Простые строки

Функции min() и max() находят символ с минимальным или максимальным кодом Unicode в строке:

print(min("яблоко"))  # Вывод: 'б' (минимальный символ)
print(max("яблоко"))  # Вывод: 'я' (максимальный символ)

2. Строки с пробелами

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

print(min("apple яблоко"))  # Вывод: ' ' (пробел)
print(max("apple яблоко"))  # Вывод: 'я'

3. Чувствительность к регистру

Заглавные буквы имеют меньший Unicode, чем строчные:

print(min("Apple"))  # Вывод: 'A'
print(max("Apple"))  # Вывод: 'p'

print(min("apple"))  # Вывод: 'a'
print(max("apple"))  # Вывод: 'p'

4. Сравнение слов

Если применить min() или max() к списку слов, будет выбран результат на основе первого символа каждого слова:

words = ["яблоко", "апельсин", "банан"]
print(min(words))  # Вывод: 'апельсин' (первая буква 'а')
print(max(words))  # Вывод: 'яблоко' (первая буква 'я')

5. Слова с одинаковой первой буквой

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

words = ["актер", "азбука", "автор"]
print(min(words))  # Вывод: 'автор'
print(max(words))  # Вывод: 'актер'

6. Использование параметра key

Функции min() и max() позволяют настроить правила сравнения через параметр key. Например, сравнение по длине строки:

words = ["арбуз", "яблоко", "груша"]
print(max(words, key=len))  # Вывод: 'яблоко' (самая длинная строка)
print(min(words, key=len))  # Вывод: 'груша' (самая короткая строка)

Другой пример - сравнение строк независимо от регистра:

words = ["Арбуз", "апельсин", "Банан"]
print(min(words))  # Вывод: 'Арбуз' (учитывается регистр)
print(min(words, key=str.lower))  # Вывод: 'апельсин' (игнорируется регистр)

7. Работа с числами как строками

Если сравнивать строки, содержащие числа, результат зависит от их лексикографического порядка, а не от числового значения:

numbers = ["100", "2", "12"]
print(min(numbers))  # Вывод: '100'
print(max(numbers))  # Вывод: '2'

8. Эмодзи и символы

Эмодзи находятся в конце таблицы Unicode, поэтому они обычно считаются "максимальными":

print(min("Python ❤️"))  # Вывод: ' ' (пробел)
print(max("Python ❤️"))  # Вывод: '❤' (эмодзи "сердце")

✔️ Как узнать код символа?

Функция ord() принимает один символ (букву, цифру или знак) и возвращает его числовое значение, которое соответствует этому символу в таблице символов Unicode. Это значение называется "код символа".

print(ord('A'))  # Вывод: 65 (код символа 'A')
print(ord('a'))  # Вывод: 97 (код символа 'a')
print(ord('0'))  # Вывод: 48 (код символа '0')
print(ord('@'))  # Вывод: 64 (код символа '@')

✔️ Как узнать символ по коду?

Функция chr() — это обратная функция к ord(). Она принимает числовое значение (код символа) и возвращает символ, который ему соответствует.

print(chr(65))  # Вывод: 'A'
print(chr(97))  # Вывод: 'a'
print(chr(48))  # Вывод: '0'
print(chr(64))  # Вывод: '@'

✔️ Интересные факты о Unicode

  1. Обратная совместимость с ASCII: Первые 128 символов Unicode (коды 0-127) совпадают с таблицей ASCII (аски).

  2. Диапазон кодов: Unicode охватывает миллионы символов, включая алфавиты всех языков мира, математические символы и даже эмодзи.

  3. Специальные коды: Есть символы, которые выглядят одинаково, но имеют разные коды (например, кириллическая "А" и латинская "A"). Это важно учитывать при сравнении строк.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.