Вы должны будете использовать нарезку применить сортировку подсекции, а затем вновь соединить части:
return input_str[:3] + ''.join(sorted(input_str[3:7])) + input_str[7:]
Поскольку sorted()
на строке возврат отдельных символов, вам нужно повторно присоединиться к тем.
Вы можете применить обычные аргументы сортировки к sorted()
как реверсирование. Функция помощник может сделать обработку этих и начальные и конечные показатели проще:
def sort_section(string, start, stop, **kwargs):
mid = ''.join(sorted(string[start:stop], **kwargs))
return string[:start] + mid + string[stop:]
Обратите внимание, что ваша выборка является сортировка из индекса 3 до индекса (кусочки Python являются разомкнуты, конечный показатель является не входит), и вы вспять рода:
>>> def sort_section(string, start, stop, **kwargs):
... mid = ''.join(sorted(string[start:stop], **kwargs))
... return string[:start] + mid + string[stop:]
...
>>> sort_section('edayzadr', 3, 8, reverse=True)
'edazyrda'
для кортежа, вы должны преобразовать sorted()
вывод обратно на кортеж до конкатенации:
input_tup[:3] + tuple(sorted(input_tup[3:7])) + input_tup[7:]
Для объекта списка вы можете опустить вызов str.join()
; вы можете просто присвоить обратно на тот же срез, как список, по крайней мере изменчиво:
sorted_lst[3:7] = sorted(input_lst[3:7])
Поскольку теперь у вас есть 3 различных методов для повторного присоединения 3 струнных (моя конкатенация и mhawke в str.format
и str.join
варианты), вот быстрый тест, а также сравнить эти:
>>> from timeit import timeit
>>> def concat(s):
... return s[:3] + ''.join(sorted(s[3:7])) + s[7:]
...
>>> def format(s):
... return '{}{}{}'.format(s[:3], ''.join(sorted(s[3:7])), s[7:])
...
>>> def join(s):
... return ''.join((s[:3], ''.join(sorted(s[3:7])), s[7:]))
...
>>> timeit("concat('edayzadr')", 'from __main__ import concat')
1.0208790302276611
>>> timeit("format('edayzadr')", 'from __main__ import format')
1.322662115097046
>>> timeit("join('edayzadr')", 'from __main__ import join')
1.1326570510864258
Ваш сортировка не имеет особого смысла. Вы отсортировали ** в обратном порядке ** из индексов 3-8, а не 7. –
Обратите внимание, что если у вас есть * string * или * tuple * (оба неизменяемые), а не * список * (изменчивый), ответ будет немного отличаться , поэтому, пожалуйста, уточните название. – jonrsharpe