Как мне разделить и объединить элементы списка python, когда вам нужно опустить элементы в точках разделения?

#python #list #split

#python #Список #разделить

Вопрос:

Я ищу компактный и элегантный способ без использования itertools.

Функция принимает строку, состоящую из круглых скобок (открытая скобка гарантированно будет иметь соответствующую закрывающую скобку) Затем он находит вложенную строку в самых внутренних скобках, переворачивает ее на место и удаляет соответствующие окружающие круглые скобки и возвращает измененную строку.

 def swap_innermost(self, s): # example s = "(u(love)i)" returns "(uevoli)"
    start= s.rfind('(')
    end= start   s[start:].find(')')
    found= (start != -1) and (end != -1) # find()/rfind() returns -1 when not found

    if found:
        part1= s[0:start] if start != 0 else ''                
        part2= s[start 1:end][::-1] # chew out ( char and reverse rest
        part3= s[end 1:] if end != len(s)-1 else '' # chew out ) char
            
        return part1  part2  part3
    else:
        return s
  

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

1. Если у вас есть строка типа ((ab)cd(ef)) , должна ли она поменять местами оба ab и ef ? Аналогично, если у вас есть ((ab)cd(ef(gh)ij)) , следует ли отменить оба ab и gh ?

2. Код должен просто позаботиться о последнем ‘(‘ и связанном с ним ‘)’. Повторяющийся внешний цикл, когда swap_innermost() вызывает swap_innermost() несколько раз, пока все скобки не будут удалены, а содержимое поменяется местами, приведет к => ((ab)cd(ef)) станет ((ab)cdfe) … после второго вызова (bacdfe).. после 3-го вызова мы получаем efdcab.