Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 4, 2011 11:59:59

Hirurg
От:
Зарегистрирован: 2011-10-04
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

использование sort и argsort для строк

Здравствуйте! Подскажите пожалуйста можно ли использовать функции sort и argsort, передавая в качестве параметров строки. Я читал документацию, перекопал кучу ссылок в гугле, но так и не нашёл как можно отсортировать символы в строке с помощью sort или получить соответствующие индексы с помощью argsort. Если вопрос поставлен некорректно буду рад выслушать конструктивную критику. С питоном только-только знакомлюсь)



Офлайн

#2 Окт. 4, 2011 12:21:11

kublo
От:
Зарегистрирован: 2011-04-08
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

использование 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'



Офлайн

#3 Окт. 4, 2011 12:23:06

Hirurg
От:
Зарегистрирован: 2011-10-04
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

использование sort и argsort для строк

kublo
>>> 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'
спасибо за рабочий совет, но хотелось бы знать, возможно ли применять sort и argsort напрямую к строкам =)



Отредактировано (Окт. 4, 2011 12:23:29)

Офлайн

#4 Окт. 4, 2011 12:31:00

kublo
От:
Зарегистрирован: 2011-04-08
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

использование sort и argsort для строк

Строки - неизменяемые объекты и у них нет метода sort.
(Что такое argsort я не знаю)



Офлайн

#5 Окт. 4, 2011 14:27:25

pill
От:
Зарегистрирован: 2010-08-27
Сообщения: 223
Репутация: +  0  -
Профиль   Отправить e-mail  

использование sort и argsort для строк

sort и argsort я так понимаю из numpy.

просто отсортировать строчку можно через sorted, но как указал kublo это будет новая строка, на месте строки сортировать нельзя.

>>> ''.join(sorted('fdsfsdaasd'))
7: 'aadddffsss'
реализации argsort на SO можно посмотреть: http://stackoverflow.com/questions/3382352/equivalent-of-numpy-argsort-in-basic-python
пример:
>>> 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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version