Pull to refresh

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

Level of difficultyMedium

Функции 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"). Это важно учитывать при сравнении строк.

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.