用于删除圆括号的函数不起作用,Python 3



我有一个函数,它接受一个参数,最好是一个字符串,接受字符串的每个值,并将它们作为列表中的元素来实现。之后,它遍历列表,并应该删除/删除圆括号中的元素,所以基本上是:()。这是代码:

def func(s):
n = 0
s = [i for i in s]
for i in s:
if s[n] == "(" or s[n] == ")":
del s[n]
else:
n += 1
continue
return s
print(func("ubib0_)IUBi(biub()()()9uibib()((U*H)9g)*(GB(uG(*UV(V79V*&^&87vyutgivugyrxerdtufcviO)()(()()()(0()90Y*(g780(&*^(UV(08U970u9yUV())))))))))"))

但是,函数会停止迭代并提前结束/返回列表(当一些圆括号仍然存在时(。

我还采用了另一种方法,一种行之有效的方法:

def func(s):
n = 0
s = [i for i in s]
s2 = [i for i in s if i != "(" and i != ")"]
return s2
print(func("ubib0_)IUBi(biub()()()9uibib()((U*H)9g)*(GB(uG(*UV(V79V*&^&87vyutgivugyrxerdtufcviO)()(()()()(0()90Y*(g780(&*^(UV(08U970u9yUV())))))))))"))

为什么这个有效,而另一个无效?他们希望输出相同的结果。第一个例子中我做错了什么?

您的概念是正确的,您要么删除当前项,要么增加n

你错的地方是你在迭代每个字母,考虑到以上信息,这是没有意义的。将for i in s更改为while n < len(s)将解决此问题。

你可能会发现一些有用的东西:

  • list(s)看起来比[i for i in s]干净
  • i not in "()"是写i != "(" and i != ")"的另一种方式

在开始增加n时,n等于i。但当遇到括号时,n在下一次迭代中具有相同的值,并且i会增加。每当s[n] == "(" or s[n] == ")"ni的值之间的差值增加时,就会发生这种情况。

为了正确工作,程序需要使用s[n]检查列表(字符串(中的每个符号是否等于'('')',但这并没有发生,因为当i达到列表的末尾时迭代停止,而此时的n远小于i,并且它还没有达到列表的结尾,也没有检查所有符号。

最新更新