Сортировка списка строк (слов) по алфавиту в Python

Дан список слов. Выполнить его сортировку по алфавиту.

Решение задачи на языке программирования Python

В Python строки сравниваются между собой лексикографически. Это значит, что при сравнении двух строк сначала между собой сравниваются их первые символы. Если они различны, то меньшей оказывается та строка, чей первый символ имеет меньший код по таблице символов. В таких таблицах, в том числе Unicode, коды букв соответствуют их последовательности в алфавите.

>>> ord('А')
1040
>>> ord('Б')
1041
>>> ord('В')
1042

Если первые символы сравниваемых строк окажутся равны друг другу, то сам интерпретатор Питона будет сравнивать вторые буквы слов и так далее. Нам для этого ничего делать не надо.

Поэтому в Python сортировка списка слов по алфавиту ничем не отличается от сортировки списка чисел по возрастанию. Если решается практическая задача (реальное программирование), то можно воспользоваться встроенной функцией sorted() или списковым методом sort().

data = ['table', 'cup', 'box', 'bottle', 'lamp', 'list', 'flower']
print(sorted(data))

или

data = ['table', 'cup', 'box', 'bottle', 'lamp', 'list', 'flower']
data.sort()
print(data)

В обоих случаях вывод на экран будет одинаковым:

['bottle', 'box', 'cup', 'flower', 'lamp', 'list', 'table']

Однако в самих программах содержимое data будет разным. В случае sorted() список не меняется. Эта функция возвращает нам новый список, оставляя старый без изменений. В отличие от нее, метод sort() сортирует сам список-оригинал, изменяя его. Говорят: "выполняет сортировку на месте".

Если изучаются алгоритмы и язык программирования, то уместным может быть решение задачи через "классические" алгоритмы сортировки. Сортировка списка слов методом пузырька на языке Python будет выглядеть так:

data = ['table', 'cup', 'box', 'bottle', 'lamp', 'list', 'flower']
length = len(data)

for i in range(length-1):
    for j in range(length-1-i):
        if data[j] > data[j+1]:  # строки сравниваются лексикографически
            data[j], data[j+1] = data[j+1], data[j]

print(data)

Сортировка строк методом выбора:

data = ['table', 'cup', 'box', 'bottle', 'lamp', 'list', 'flower']
length = len(data)

i = 0
while i < length-1:
    m = i
    j = i + 1
    while j < length:
        if data[j] < data[m]:
            m = j
        j += 1
    data[i], data[m] = data[m], data[i]
    i += 1

print(data)


Решение задач на Python




Все разделы сайта