Найти - Пользователи
Полная версия: сортировка списка
Начало » Python для новичков » сортировка списка
1
MarkHammer
'1021_cab2', ‘119_cab2’, ‘1345_cab2’, ‘137_cab2’, ‘145_cab2’, ‘146_cab2’, ‘154_cab2’, ‘187_cab2’, ‘189_cab2’, ‘212_cab2’, ‘221_cab2’, ‘223_cab2’, ‘239_cab2’, ‘275_cab2’, ‘282_cab2’, ‘283_cab2’, ‘300_cab2’, ‘31_cab2’, ‘353_cab2’, ‘385_cab2’, ‘387_cab2’, ‘396_cab2’, ‘3999_cab2’, ‘467_cab2’, ‘506_cab2’, ‘520_cab2’, ‘524_cab2’, ‘551_cab2’, ‘569_cab2’, ‘575_cab2’, ‘605_cab2’, ‘612_cab2’, ‘624_cab2’, ‘631_cab2’, ‘63_cab2’, ‘690_cab2’, ‘721_cab2’, ‘72_cab2’, ‘74_cab2’, ‘81_cab2’, ‘82_cab2’, ‘85_cab2’, ‘88_cab2’, ‘89_cab2’, ‘927_cab2’, ‘929_cab2’

помогите плиз отсортировать такой вот список от cab2 c меньшим номером … к большему…
4kpt
Не поленитесь прочитать

http://www.python.su/forum/topic/20871/
Viktor_Zorichev
l = ['1021_cab2', '119_cab2', '1345_cab2', '137_cab2', '145_cab2', '146_cab2', '154_cab2', '187_cab2', '189_cab2', '212_cab2', '221_cab2', '223_cab2', '239_cab2', '275_cab2', '282_cab2', '283_cab2', '300_cab2', '31_cab2', '353_cab2', '385_cab2', '387_cab2', '396_cab2', '3999_cab2', '467_cab2', '506_cab2', '520_cab2', '524_cab2', '551_cab2', '569_cab2', '575_cab2', '605_cab2', '612_cab2', '624_cab2', '631_cab2', '63_cab2', '690_cab2', '721_cab2', '72_cab2', '74_cab2', '81_cab2', '82_cab2', '85_cab2', '88_cab2', '89_cab2', '927_cab2', '929_cab2']
li = []
res = []
for i in l:
    li.append(int(i.split('_')[0]))
for i in sorted(li):
    res.append(str(i) + '_cab2')
print(res)
['31_cab2', '63_cab2', '72_cab2', '74_cab2', '81_cab2', '82_cab2', '85_cab2', '88_cab2', '89_cab2', '119_cab2', '137_cab2', '145_cab2', '146_cab2', '154_cab2', '187_cab2', '189_cab2', '212_cab2', '221_cab2', '223_cab2', '239_cab2', '275_cab2', '282_cab2', '283_cab2', '300_cab2', '353_cab2', '385_cab2', '387_cab2', '396_cab2', '467_cab2', '506_cab2', '520_cab2', '524_cab2', '551_cab2', '569_cab2', '575_cab2', '605_cab2', '612_cab2', '624_cab2', '631_cab2', '690_cab2', '721_cab2', '927_cab2', '929_cab2', '1021_cab2', '1345_cab2', '3999_cab2']
MarkHammer
Viktor_Zorichev


да - работает, думал правда, что это можно сделать при помощи рег. выражений…
Спасибо !!!
Rodegast
l = ['1021_cab2', '119_cab2', '1345_cab2', '137_cab2', '145_cab2', '146_cab2', '154_cab2', '187_cab2', '189_cab2', '212_cab2', '221_cab2', '223_cab2', '239_cab2', '275_cab2', '282_cab2', '283_cab2', '300_cab2', '31_cab2', '353_cab2', '385_cab2', '387_cab2', '396_cab2', '3999_cab2', '467_cab2', '506_cab2', '520_cab2', '524_cab2', '551_cab2', '569_cab2', '575_cab2', '605_cab2', '612_cab2', '624_cab2', '631_cab2', '63_cab2', '690_cab2', '721_cab2', '72_cab2', '74_cab2', '81_cab2', '82_cab2', '85_cab2', '88_cab2', '89_cab2', '927_cab2', '929_cab2']
l.sort(lambda x,y: cmp(int(x.split("_")[0]),int(y.split("_")[0])))
Viktor_Zorichev
Прочитал http://docs.python.org/3.3/howto/sorting.html
Замечательно коротко и ясно написано
Мне понятнее пример без использования cmp (про cmp, кстати, написано, что это “old way”).
>>> l = ['1021_cab2', '119_cab2', '1345_cab2', '137_cab2']
>>> sorted(l, key=lambda i: int(i.split('_')[0]))
['119_cab2', '137_cab2', '1021_cab2', '1345_cab2']
Rodegast
> Мне понятнее пример без использования cmp

cmp это функция сравнения, ей передаётся 2 аргумента из списка и она говорит какой больше.
Viktor_Zorichev
Да, спасибо
dimy44
Сортировка по cmp очень медленная и Гвидо сам не рекомендовал ее применять без крайней необходимости.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB