Страницы

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

понедельник, 30 декабря 2019 г.

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

#python #python_3x


Как преобразовать строку, состоящую из слов разделенных пробелами, в список, и отсортировать
полученный список в лексикографическом порядке?

Дана строка из слов, разделенных пробелами:

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() в одной строчке?
    


Ответы

Ответ 1



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

Ответ 2



Это просто: a = sorted(s.split(' ')) В обратном порядке: a = sorted(s.split(' '), reverse=True)

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

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