инвертирование строк (зеркальное отображение из центра)

#python #string

#питон #строка

Вопрос:

Разве нет более простого способа инвертировать строку, подобную EURUSD to USDEUR , вместо использования этого кода:

new_str = old_str[-3:] old_str[:3]

Комментарии:

1. нет, если у вас нет контроля над тем, откуда берется строка

2. Как вы думаете, какая сложность есть в этом коде, которую можно удалить?

Ответ №1:

Нет ничего короче того, что вы делаете. Я подозреваю, что вы думали о трюке для изменения строки, где s[::-1] она меняет ее. Здесь вы меняете местами фрагменты длиной 3. Ни одна операция среза не может этого сделать.

Если вы часто делаете подобные вещи, в том числе для более длинных строк, может помочь написание функции:

 def reverse_chunks(s,k):
    """reverses the order of k-sized chunks in s"""
    return ''.join([s[i:i k] for i in range(0,len(s),k)][::-1])
 

Тогда, например:

 >>> reverse_chunks('EURUSD',3)
'USDEUR'
 

Основываясь на этом, вы, конечно, могли бы написать более специализированный:

 def invert(s):
    return reverse_chunks(s,len(s)//2)