Skip to main content
 首页 » 编程设计

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

2025年05月04日8JeffreyZhao

我目前有一个方法需要优化! 我仍在学习 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 版本/平台,使用最快的。

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