gpt4 book ai didi

python - 在 Python 中,我试图快速地用句点替换字符串中的假括号

转载 作者:太空宇宙 更新时间:2023-11-04 06:37:14 26 4
gpt4 key购买 nike

假设我有一个仅包含“(”、“)”和“.”的字符串我想将所有与相应 () 不匹配的 () 替换为 .

例如:

s1 = '((.))'
s2 = '((.)'
s3 = '(.))'

修复这些会得到:

rs1 = '((.))'
rs2 = '.(.)'
rs3 = '(.).'

现在,我正在使用堆栈获取所有伪造的 (),然后使用列表理解来替换它们。

鉴于 fold 是上面的 s* 字符串之一,这是我的代码:

hashFoldStack = []
makePeriods = set()
for hashFoldIndex, hashFoldCharacter in enumerate(fold):
if hashFoldCharacter == '(':
hashFoldStack.append(hashFoldIndex)
elif hashFoldCharacter == ')':
if len(hashFoldStack) > 0:
hashFoldStack.pop()
else:
makePeriods.update([hashFoldIndex])
if len(hashFoldStack) > 0:
for leftover in hashFoldStack:
makePeriods.update(leftover)

hashFold = ''.join(['.' if hashIndex in makePeriods\
else hashCharacter\
for hashIndex, hashCharacter\
in enumerate(fold)])

问题 1:对于我创建 makePeriods 堆栈的第一部分,是否有更快的方法来执行此操作?问题 2:列表理解是否会比 lambda 或 re 模块中的某些函数更快?

最佳答案

我认为代码非常快。让我们现在让它工作:-)

if len(hashFoldStack) > 0:
for leftover in hashFoldStack:
makePeriods.update(leftover)

应该只是:

makePeriods.update(hashFoldStack)

我在网上搜索了一下 here我找到了一篇关于该主题的精彩文章。它提到通过连接和列表推导式构造字符串是最快的方法之一。如果您想进一步优化,请按照评论建议使用某种分析方法。您可以将代码包装在运行多次的 for 循环中,然后像这样启动脚本 $ python -m cProfile script.py

顺便说一句,可以通过在循环中构造hashFoldListhashFoldStack 来使其更快。最后,它只是:hashFold = ''.join(hashFoldList)。无论如何,一个有趣的问题。

关于python - 在 Python 中,我试图快速地用句点替换字符串中的假括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9041483/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com