为了账号安全,请及时绑定邮箱和手机立即绑定

python代码从列表中获取结束大括号索引

python代码从列表中获取结束大括号索引

慕森王 2021-12-21 16:25:05
我有我的字符串输入列表,我需要在其中传递任何左大括号的索引,并期望我的 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 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

你只需要从起始行开始计算左大括号,当遇到左大括号时,增加它,当遇到右大括号时,减少它。当它再次达到零时,您会找到正确的索引。


示例代码:


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, '')

希望能帮到你。


查看完整回答
反对 回复 2021-12-21
  • 1 回答
  • 0 关注
  • 174 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信