Python 3中字符串函数的意外输出

Python 3中字符串函数的意外输出,python,python-3.x,jupyter-notebook,Python,Python 3.x,Jupyter Notebook,我正在用Python3编写代码,或者尝试编写代码,它接受一个大括号字符串,比如“{{]]”,并查找相邻的一对大括号,这些大括号要么是“[”紧跟着“]”,要么是“{”紧跟着“}”,要么是“(”紧跟着“)“。它返回找到的第一对,如果找不到,则返回False。为此,我编写了一些代码: #编写一个函数,扫描大括号序列以查找“已婚对”,否则如果没有,则返回false。 def find(mystring): 对于mystring[0:-1]中的x: y=mystring[mystring.index(x)

我正在用Python3编写代码,或者尝试编写代码,它接受一个大括号字符串,比如“{{]]”,并查找相邻的一对大括号,这些大括号要么是“[”紧跟着“]”,要么是“{”紧跟着“}”,要么是“(”紧跟着“)“。它返回找到的第一对,如果找不到,则返回False。为此,我编写了一些代码:

#编写一个函数,扫描大括号序列以查找“已婚对”,否则如果没有,则返回false。
def find(mystring):
对于mystring[0:-1]中的x:
y=mystring[mystring.index(x)+1:[0]
如果(x='['和y=']')或(x='{'和y='}')或(x='('和y=')):
返回x,y
其他:
持续
返回错误
因此,当我在字符串
({})上尝试find函数时,它可以正常工作。它按预期返回
({',}')
。但是当我尝试查找
({}')
时,它意外地返回
False
。运行
([()])
意外地返回
False
([{}])
按预期返回
True

这里发生了什么?

.index()
返回该字符出现时的第一个索引,因此当您的值大于1时,您会得到错误的y

您可以使用
zip
将相邻字符配对,如下所示:

def find(mystring):
    for i,x in enumerate(mystring[:-1]):
        y = mystring[i+1]
        if (x == '[' and y == ']') or (x == '{' and y == '}') or (x == '(' and y == ')'):
            return x,y
    return False
def find(mystring):
pairs=zip(mystring,mystring[1:])
对于成对的x、y:
如果(x='['和y=']')或(x='{'和y='}')或(x='('和y=')):
返回x,y
其他:
持续
返回错误
打印(查找('({}'))
打印(查找({}}'))
打印(查找(“([()])”)
mystring.index(x)
不返回您正在查看的索引。它返回给定字符的第一个索引。因此,当您位于
{}
的第二个
{
字符时,
索引(x)
返回0。如果在迭代时使用索引,请使用

固定版本可以如下所示:

def find(mystring):
    for i,x in enumerate(mystring[:-1]):
        y = mystring[i+1]
        if (x == '[' and y == ']') or (x == '{' and y == '}') or (x == '(' and y == ')'):
            return x,y
    return False
试试这个:

def find_married_braces(s):
    for i in range(len(s)-1):
        a, b = s[i], s[i+1]
        if (a == '(' and b == ')') or (a == '[' and b == ']') or (a == '{' and b == '}'):
            return i, i+1
    return False


print(find_married_braces('{{]]'))
print(find_married_braces('{{}}'))
print(find_married_braces('([()])'))
print(find_married_braces('([{}])'))
输出
mystring.index(x)
不返回您正在查看的索引。它返回给定字符的第一个索引。因此,当您位于第二个
{
字符时,
index(x)
返回0。如果您在迭代时使用索引,请使用
枚举
。它正在比较“([()])(而不是(to)”,得到它。