LINUX.ORG.RU

Python: сортировка списка по алфавиту и порядку номеров

 , ,


0

3

Есть список myawesomelist. Сортирую через myawesomelist.sort(). Получается:

myawesomeelement_0
myawesomeelement_1
myawesomeelement_10
myawesomeelement_100
myawesomeelement_11
myawesomeelement_12
myawesomeelement_13
myawesomeelement_14
myawesomeelement_15
myawesomeelement_16
myawesomeelement_17
myawesomeelement_18
myawesomeelement_19
myawesomeelement_2
myawesomeelement_20
myawesomeelement_21
myawesomeelement_22
myawesomeelement_23
myawesomeelement_24
myawesomeelement_25
myawesomeelement_26
myawesomeelement_27
myawesomeelement_28
myawesomeelement_29
myawesomeelement_3
myawesomeelement_30
myawesomeelement_31
...
myawesomeelement_89
myawesomeelement_9
myawesomeelement_90
myawesomeelement_91
myawesomeelement_92
myawesomeelement_93
myawesomeelement_94
myawesomeelement_95
myawesomeelement_96
myawesomeelement_97
myawesomeelement_98
myawesomeelement_99

Как отсортировать список, чтобы получилось:

myawesomeelement_0
myawesomeelement_1
myawesomeelement_2
myawesomeelement_3
myawesomeelement_4
myawesomeelement_5
myawesomeelement_6
..
myawesomeelement_98
myawesomeelement_99
myawesomeelement_100

?

★★★★★

text = """myawesomeelement_0
myawesomeelement_1
myawesomeelement_10
myawesomeelement_100
myawesomeelement_11
myawesomeelement_12
myawesomeelement_13
myawesomeelement_14
myawesomeelement_15
myawesomeelement_16
myawesomeelement_17
myawesomeelement_18
myawesomeelement_19"""



print(sorted(text.splitlines(), key=lambda s: int(s[s.rindex('_')+1:])))
anonymous ()
Ответ на: комментарий от TheKnight

Хорошая, годная штука, спасибо. Теперь знаю как называется такая сортировка. Почему такое не пропихнули в стандарт, да и остальные языки изначально так не сортируют...

xDShot ★★★★★ ()
Ответ на: комментарий от xDShot

Почему такое не пропихнули в стандарт, да и остальные языки изначально так не сортируют..

Какой тебе стандарт ? то что ты показал - это строки и сортировать их нужно как строки. Цифры то тут причем ?

да и остальные языки изначально так не сортируют..

Это какие например ?

Jopich1 ()
Последнее исправление: Jopich1 (всего исправлений: 1)
def sorter(s):
     words = s.split('_')
     if len(words) > 1 and words[1].isdigit()
          words[1] = int(words[1])
     return words

print(sorted(text, key=sorter))

или одной строчкой

sorted(text.splitlines(), key=lambda x: [int(word) if word.isdigit() else word for word in x.split('_')])

Shtsh ★★★★ ()