从列表中获取结束大括号索引的python代码
我有一个字符串的输入列表,我需要在其中传递任何开始大括号的索引,并期望python函数返回其相应的结束大括号的索引及其值 输入列表:从列表中获取结束大括号索引的python代码,python,text-parsing,Python,Text Parsing,我有一个字符串的输入列表,我需要在其中传递任何开始大括号的索引,并期望python函数返回其相应的结束大括号的索引及其值 输入列表: mylist=[ 'a', 'b(', '(', 'cd', 'd(e)', 'hi)', 'last brace) ' ] 我需要得到列表的索引和字符串 getindex=func(mylist[2]) getindex应具有索引5的hi)。它应该忽略所有相应的平衡大括号,例如:d(e)或最后一个大括号)等 getindex=(5,'hi)') 我对pyt
mylist=[
'a',
'b(',
'(',
'cd',
'd(e)',
'hi)',
'last brace) '
]
我需要得到列表的索引和字符串
getindex=func(mylist[2])
getindex应具有索引5的hi)
。它应该忽略所有相应的平衡大括号,例如:d(e)
或最后一个大括号)
等
getindex=(5,'hi)')
我对python不太熟悉,非常感谢您抽出时间来帮助我。谢谢 您只需要从起始线开始计算左大括号,当遇到左大括号时,增加它,当遇到右大括号时,减少它。当它再次达到零时,您将找到正确的索引 您的示例代码:
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, '')
def get_closing_brake_index(str_list,left_idx):
#输入检查,如果确保输入有效,则可以忽略它
如果left_idx<0或left_idx>=len(str_列表)或“(”不在str_列表[left_idx]中):
返回-1,'
#使用左括号计数器
左计数=0
#在打开索引之前忽略所有内容
对于枚举中的i,s(str_list[left_idx:]):
对于s中的c:
如果c=='(':
左计数+=1
elif c==')':
左计数-=1
#找到匹配的右括号
如果左_计数=0:
返回i+left\u idx,str\u list[i+left\u idx]
#大括号匹配无效
elif left_计数<0:
返回-1,'
返回-1,'
def test():
mylist=[
“a”,
"b(",,
'(',
“cd”,
"d(e)",,
"嗨",,
“最后一个括号)”
]
打印(获取索引(mylist,1))
#输出(6,‘最后一个大括号)’)
打印(获取索引(mylist,2))
#输出(5,‘hi’)
打印(获取索引(mylist,4))
#输出(4,‘d(e)’)
打印(获取索引(mylist,0))
#输出(-1,,)
打印(获取索引(mylist,6))
#输出(-1,,)
希望对您有所帮助。您只需从起始线开始计算左大括号,遇到左大括号时,增加它,遇到右大括号时,减少它。当它再次达到零时,您将找到正确的索引 您的示例代码:
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, '')
def get_closing_brake_index(str_list,left_idx):
#输入检查,如果确保输入有效,则可以忽略它
如果left_idx<0或left_idx>=len(str_列表)或“(”不在str_列表[left_idx]中):
返回-1,'
#使用左括号计数器
左计数=0
#在打开索引之前忽略所有内容
对于枚举中的i,s(str_list[left_idx:]):
对于s中的c:
如果c=='(':
左计数+=1
elif c==')':
左计数-=1
#找到匹配的右括号
如果左_计数=0:
返回i+left\u idx,str\u list[i+left\u idx]
#大括号匹配无效
elif left_计数<0:
返回-1,'
返回-1,'
def test():
mylist=[
“a”,
"b(",,
'(',
“cd”,
"d(e)",,
"嗨",,
“最后一个括号)”
]
打印(获取索引(mylist,1))
#输出(6,‘最后一个大括号)’)
打印(获取索引(mylist,2))
#输出(5,‘hi’)
打印(获取索引(mylist,4))
#输出(4,‘d(e)’)
打印(获取索引(mylist,0))
#输出(-1,,)
打印(获取索引(mylist,6))
#输出(-1,,)
希望能对您有所帮助。请将您的代码放在这里,让我们看到您的需求。您需要重新思考您的功能设计
mylist[2]
只是字符串”(“
,函数如何知道起始点的索引?列表中很容易有多个”(“
元素。就此而言,它如何知道要搜索的列表?更好的“签名”是func(mylist,2)
。我同意。谢谢你的回答。在我的文本文件中,我已经知道大括号的开头是一个字符“(”,我选择了第一个出现的“(”,没有其他字符。我可以传递func(mylist[2])或func(mylist,2)请将您的代码放在这里,让我们看到您的需求。您需要从重新考虑函数的设计开始。mylist[2]
只是字符串”(“
),您的函数如何知道起始点的索引?可以很容易地有多个”(“
列表中的元素。就此而言,它如何知道要在哪个列表中搜索?一个更好的“签名”是func(mylist,2)
。我同意。感谢您的回复。在我的文本文件中,我已经知道大括号中的单个字符是“(”并且我正在选择第一个出现的“”('没有其他字符。我可以通过func(mylist[2])或func(mylist,2)太棒了!非常感谢recnac@.这是可行的,我将尝试使用此代码并在返回-1时引发异常。当一个测试用例有两个((
在其中,你需要找到索引,在这种情况下,维克似乎提到了“我正在收集第一次发生的”(“”@prashantranait最好使用队列来实现它,从0开始查找所有打开和关闭对索引,然后提供答案对于更复杂的问题,stack
是更好的解决方案,但它很简单,只需一个计数器就可以处理它,而且速度更快:)@prashantranaAwesome!。非常感谢recnac@.这是可行的,我将尝试使用此代码并在返回-1的情况下引发异常。当一个测试用例中有两个(
)时,这将失败,并且您需要在这种情况下找到索引Vick似乎提到“我正在拾取第一个发生的”(“”@prashantranait最好使用队列实现它,从0开始查找所有打开和关闭对索引,然后为更复杂的问题提供答案,stac