2015-11-14 3 views
0

Я решаю проблему, где мне нужен конкретный вид, который я написал в своей функции MyFn, но результат sorted в python - это список. Можно ли вернуть строку без использования join? sorted(s, key=MyFn)Сортировка строк без преобразования в массив

+0

'sorted' возвращает список, так что нет, это не возможно. – vaultah

+0

Если ваша строка '' '' 'bytearray', тогда это возможно:' s [:] = sorted (s, key = MyFn) '. –

+0

Почему бы не использовать '' '.join'? Python явно предоставляет только два способа сортировки, и на самом деле они являются одним и тем же методом. 'list.sort' и' sorted'. Именно это. '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' tmp.sort(); return tmp', таким образом, только один истинный вид. – ShadowRanger

ответ

3

Это невозможно, потому что sorted() предназначен для возврата списка.

Вы можете использовать .join(), чтобы преобразовать его в строку.

s_list = sorted(s, key=MyFn) 
s_str = "".join(s_list) 

Если вы не можете использовать .join(), есть еще один способ, но это немного сложнее, и я очень не Recommand его. Вы можете использовать repr() для преобразования списка в строку, а затем благодаря нарезке, вы можете получить письма из этого списка:

s_str = repr(sorted(s, key=MyFn))[2::5] 

В представлении списка символов нечто вроде ['s', 't', 'r', 'i', 'n', 'g'], это должно работать.

+1

Я не могу использовать 'join', и я могу использовать отсортированные только один раз :) –

+1

@Bob Почему вы не могли? И, пожалуйста, используете ли вы Python 2 или Python 3? – Delgan

+0

Невозможно использовать, потому что это задача, но я могу использовать python 2 или 3 –

0

Можно ли вернуть строку без использования join?

Да, это возможно, но это медленно:

src = ['a', 'b', 'c'] 
dest = '' 

for c in src: 
    dest += src 

print(dest) 

Или с functools.reduce:

from functools import reduce 
src = ['a', 'b', 'c'] 
dest = reduce(str.__add__, src) 
print(dest) 
Смежные вопросы