我有一个列表:
temp_token = ['(', '(', '(', '(', 4.0, '+', 3.0, ')', ')', ')', '+', 7.0, ')', '+', '(', 2.0, '+', 9.0, ')']
我需要找到满足“”之前最后一个“(”)的索引。
for n in range(0,len(temp_token)):
if temp_token[n] == ")":
number = n
break
index = len(temp_token) - 1 - temp_token[number::-1].index("(")
print(index)
索引应该是3而不是14
答案 0 :(得分:0)
尝试这样的事情:
def find_brackets(arr):
cur_index = 0
for i in range(0, len(arr)):
if arr[i] == "(":
cur_index=i
elif arr[i] == ")":
return cur_index
它将跟踪最新的“(”,并在找到“)”后立即返回。
答案 1 :(得分:0)
temp_token = ['(', '(', '(', '(', 4.0, '+', 3.0, ')', ')', ')', '+', 7.0, ')', '+', '(', 2.0, '+', 9.0, ')']
last_index = 0
for k,v in enumerate(temp_token):
if v == '(':
last_index = k
elif v == ')':
break
print(last_index)
输出
3
答案 2 :(得分:0)
您的代码无效,因为您应该在应该len(temp_token) - 1
或仅len(temp_token[:number]) - 1
时执行number - 1
。您也不需要第一个for
循环,只需执行number = temp_token.index(")")
。总共看起来像这样:
number = temp_token.index(")")
index = len(temp_token[:number])-1 - temp_token[number::-1].index("(")
# or
index = number-1 - temp_token[number::-1].index("(")
但是我认为带有for循环的函数更容易阅读
def find_last_left_bracket_before_first_right_bracket(lyst):
left_bracket_index = -1
for index, element in enumerate(lyst):
if element == "(":
left_bracket_index = index
if element == ")":
return left_bracket_index
答案 3 :(得分:0)
没有for
循环的另一种方法是将str.join
与str.rindex
一起使用:
temp_token = ['(', '(', '(', '(', 4.0, '+', 3.0, ')', ')', ')', '+', 7.0, ')', '+', '(', 2.0, '+', 9.0, ')']
s = ''.join(map(str,temp_token))
s[:s.index(')')].rindex('(')
输出:
3
答案 4 :(得分:-1)
我想你想做多次。因此,使用堆栈。
brew install brewsci/science/pillow