查找索引“(”

时间:2019-05-17 03:15:11

标签: python

我有一个列表:

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

5 个答案:

答案 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.joinstr.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