Форум сайта python.su
Здравствуйте! Подскажите пожалуйста можно ли использовать функции sort и argsort, передавая в качестве параметров строки. Я читал документацию, перекопал кучу ссылок в гугле, но так и не нашёл как можно отсортировать символы в строке с помощью sort или получить соответствующие индексы с помощью argsort. Если вопрос поставлен некорректно буду рад выслушать конструктивную критику. С питоном только-только знакомлюсь)
Офлайн
>>> s = 'cdabfe'
>>> s
'cdabfe'
>>> l = list(s)
>>> l
['c', 'd', 'a', 'b', 'f', 'e']
>>> l.sort()
>>> l
['a', 'b', 'c', 'd', 'e', 'f']
>>> s = ''.join(l)
>>> s
'abcdef'
Офлайн
kubloспасибо за рабочий совет, но хотелось бы знать, возможно ли применять sort и argsort напрямую к строкам =)>>> s = 'cdabfe'
>>> s
'cdabfe'
>>> l = list(s)
>>> l
['c', 'd', 'a', 'b', 'f', 'e']
>>> l.sort()
>>> l
['a', 'b', 'c', 'd', 'e', 'f']
>>> s = ''.join(l)
>>> s
'abcdef'
Отредактировано (Окт. 4, 2011 12:23:29)
Офлайн
Строки - неизменяемые объекты и у них нет метода sort.
(Что такое argsort я не знаю)
Офлайн
sort и argsort я так понимаю из numpy.
просто отсортировать строчку можно через sorted, но как указал kublo это будет новая строка, на месте строки сортировать нельзя.
>>> ''.join(sorted('fdsfsdaasd'))
7: 'aadddffsss'
>>> def argsort(seq):
... #http://stackoverflow.com/questions/3382352/equivalent-of-numpy-argsort-in-basic-python/3382369#3382369
... #by ubuntu
... return sorted(range(len(seq)), key=seq.__getitem__)
...
... data = 'fdsfsdaasd'
... print argsort(data)
... print ''.join((data[i] for i in argsort(data)))
[6, 7, 1, 5, 9, 0, 3, 2, 4, 8]
aadddffsss
Отредактировано (Окт. 4, 2011 14:28:08)
Офлайн