код Python для получения конечного индекса скобки из списка - PullRequest
1 голос
/ 29 марта 2019

У меня есть мой входной список строк, где мне нужно передать индекс любой открывающей фигурной скобки и ожидать, что моя функция python вернет соответствующий индекс закрывающей фигурной скобки и его значение.

Входной список:

mylist=[
'a',
'b(',
'(',
'cd',
'd(e)',
'hi)',
'last brace) '
]

Мне нужно получить индекс и строку списка

getindex=func(mylist[2])

getindex должен иметь hi) с индексом 5. Он долженигнорировать любые соответствующие сбалансированные фигурные скобки между ex: d(e) или last brace) и т. д.

getindex=(5,'hi)')

Я немного новичок в Python и ценю ваше время, чтобы помочь мне. Спасибо!

1 Ответ

0 голосов
/ 29 марта 2019

Вам просто нужно посчитать начало левой скобки от линии старта, когда встретите левую скобку, увеличьте ее, когда встретите правую скобку, уменьшите ее. когда он снова достигнет нуля, вы найдете правильный индекс.

Пример кода для вас:

def get_closing_brace_index(str_list, left_idx):
    # input check, you can ignore it if you assure valid input
    if left_idx < 0 or left_idx >= len(str_list) or '(' not in str_list[left_idx]:
        return -1, ''

    # use a left brace counter
    left_count = 0
    # just ignore everything before open_brace_index
    for i, s in enumerate(str_list[left_idx:]):
        for c in s:
            if c == '(':
                left_count += 1
            elif c == ')':
                left_count -= 1
                # find matched closing brace
                if left_count == 0:
                    return i + left_idx, str_list[i + left_idx]
                # invalid brace match
                elif left_count < 0:
                    return -1, ''
    return -1, ''

def test():
    mylist = [
        'a',
        'b(',
        '(',
        'cd',
        'd(e)',
        'hi)',
        'last brace) '
    ]

    print(get_closing_brace_index(mylist, 1))
    # output (6, 'last brace) ')
    print(get_closing_brace_index(mylist, 2))
    # output (5, 'hi)')
    print(get_closing_brace_index(mylist, 4))
    # output (4, 'd(e)')
    print(get_closing_brace_index(mylist, 0))
    # output (-1, '')
    print(get_closing_brace_index(mylist, 6))
    # output (-1, '')

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...