Страницы

Поиск по вопросам

среда, 19 декабря 2018 г.

Преобразование строки в список с сортировкой в лексикографическом порядке

Как преобразовать строку, состоящую из слов разделенных пробелами, в список, и отсортировать полученный список в лексикографическом порядке?
Дана строка из слов, разделенных пробелами:
s = 'abc a bCd bC AbC BC BCD bcd ABC'
преобразовываем ее в список, с разделителем "пробел":
a = s.split(' ')
получаем:
['abc', 'a', 'bCd', 'bC', 'AbC', 'BC', 'BCD', 'bcd', 'ABC']
если теперь сделать так:
a = a.sort() print (a)
мы не получим ничего, если так:
b = a.sort() print (a)
получим отсортированный список
['ABC', 'AbC', 'BC', 'BCD', 'a', 'abc', 'bC', 'bCd', 'bcd']
почему так? можно ли как-то совместить sort() и split() в одной строчке?


Ответ

Потому что a.sort() просто сортирует a (список "просто" становится отсортированным), и ничего не возвращает, а функции не возвращающие ничего в Python по факту возвращают None. Если сделать a = a.sort(), вы сначала отсортируете a, а потом запишите поверх него None
Нужно делать или так:
a = a.split(' ') a.sort() print(a)
Или так, если вам нужно одной строкой:
print(sorted(a.split(' '))
Разница в том, что метод list.sort() меняет исходный список, и ничего не возвращает, а функция sorted() не меняет исходный список, а возвращает его отсортированную копию.

Комментариев нет:

Отправить комментарий