gpt4 book ai didi

Python:需要优化过滤字符方法运行时的建议

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

我目前有一个方法需要优化!我仍在学习 Python,因此非常感谢您的帮助!

我正在尝试针对一个非常大的语料库运行下面的方法,我需要优化/减少此方法的运行时间,因为它已经需要大约 6 秒的时间来执行。

要求:

  1. 检查单词只由字母、连字符和撇号组成
  2. 单词的第一个字符必须是字母
  3. 单词的最后一个字符只能是字母或撇号。
  4. 严禁使用 re 库(正则表达式)

代码如下:

def delUnknownChar(w):
wf = []
for c in w:
if (c == "'" or c == "-" or c.isalpha()):
wf.append(c)

w = "".join(wf)
wf.clear()

if (len(w) > 1):
while(not w[0].isalpha()):
w = w[1:]

while (w[-1] == "-"):
w = w[:-1]

return w
else:
return None

string1 = delUnknownChar("-'test'-")
print(string1)

输出将是test'上面的代码大约需要 5 秒才能运行。

如果我将代码的第 2-7 行更改为这一行:

w = "".join(c for c in w if c == "'" or c == "-" or c.isalpha())

运行时间以某种方式增加了 1 秒。

这里有没有人有更好的主意或改进的优化方法来以更快的速度检查它?谢谢!

最佳答案

使用其中之一

def Filter(In):
# First alpha character
for b in range(len(In)):
if In[b].isalpha():
break
if b == len(In):
return ""

# Last alpha' character
for e in range(len(In), 0, -1):
if In[e - 1].isalpha() or In[e - 1] == "'":
break

# Middle alpha-' characters
Out= [In[b]]
for i in range(b + 1, e):
if In[i].isalpha() or In[i] == "-" or In[i] == "'":
Out+= In[i]

return "".join(Out)

def Filter(In):
# First alpha character
for b in range(len(In)):
if In[b].isalpha():
break
if b == len(In):
return ""

# Last alpha' character
for e in range(len(In), 0, -1):
if In[e - 1].isalpha() or In[e - 1] == "'":
break

# Middle alpha-' characters
Out= In[b]
for i in range(b + 1, e):
if In[i].isalpha() or In[i] == "-" or In[i] == "'":
Out+= In[i]

return Out

根据您的字符串分布和 Python 版本/平台,使用最快的。

更新:这是基于对规范的更好理解的新版本。

关于Python:需要优化过滤字符方法运行时的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26807762/

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