Python,我需要以下代码才能更快地完成



我需要以下代码来在没有线程或多处理的情况下更快地完成。如果有人知道任何技巧,我们将不胜感激。可能是for i in enumerate(),或者在计算之前将列表更改为字符串,我不确定
对于下面的例子,我试图使用随机序列重新创建变量,但这使得循环中的一些条件变得无用。。。对于这个例子来说,这是可以的,这只是意味着代码的"真正"应用程序将花费稍长的时间。目前在我的i7上,下面的例子(它将主要绕过它的一些条件)在1秒内完成,我想尽可能地降低它。

import random
import time
import collections
import cProfile

def random_string(length=7):
    """Return a random string of given length"""
    return "".join([chr(random.randint(65, 90)) for i in range(length)])
LIST_LEN = 18400
original = [[random_string() for i in range(LIST_LEN)] for j in range(6)]
LIST_LEN = 5
SufxList = [random_string() for i in range(LIST_LEN)]
LIST_LEN = 28
TerminateHook = [random_string() for i in range(LIST_LEN)]
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Exclude above from benchmark

ListVar = original[:]
for b in range(len(ListVar)):
   for c in range(len(ListVar[b])):
       #If its an int ... remove
       try:
           int(ListVar[b][c].replace(' ', ''))
           ListVar[b][c] = ''
       except: pass
       #if any second sufxList delete
       for d in range(len(SufxList)):
           if ListVar[b][c].find(SufxList[d]) != -1: ListVar[b][c] = ''
       for d in range(len(TerminateHook)):
           if ListVar[b][c].find(TerminateHook[d]) != -1: ListVar[b][c] = ''
   #remove all '' from list
   while '' in ListVar[b]: ListVar[b].remove('')
print(ListVar[b])
ListVar = original[:]

这就形成了ListVar的浅层副本,所以对二级列表的更改也会影响原始列表。你确定这就是你想要的吗?最好是从头开始构建新的修改列表。

for b in range(len(ListVar)):
   for c in range(len(ListVar[b])):

讨厌:只要有可能,就直接在列表上迭代。

       #If its an int ... remove
       try:
           int(ListVar[b][c].replace(' ', ''))
           ListVar[b][c] = ''
       except: pass

您想忽略数字中间的空格吗?这听起来不对。如果数字可以是负数,您可能希望使用try..except,但如果它们只是正数,请使用.isdigit()

       #if any second sufxList delete
       for d in range(len(SufxList)):
           if ListVar[b][c].find(SufxList[d]) != -1: ListVar[b][c] = ''

这只是不好的命名吗?SufxList表示您正在寻找后缀,如果是,只需使用.endswith()(请注意,您可以传入元组以避免循环)。如果您真的想找到后缀,请使用in运算符。

       for d in range(len(TerminateHook)):
           if ListVar[b][c].find(TerminateHook[d]) != -1: ListVar[b][c] = ''

再次使用in运算符。any()在这里也很有用。

   #remove all '' from list
   while '' in ListVar[b]: ListVar[b].remove('')

并且CCD_ 8是O(n^2),即它将是慢的。你可以用列表理解来去除空白,但最好一开始就建立干净的列表。

print(ListVar[b])

我想你的压痕可能是错的。

把这些建议放在一起会得到这样的结果:

suffixes = tuple(SufxList)
newListVar = []
for row in original:
   newRow = []
   newListVar.append(newRow)
   for value in row:
       if (not value.isdigit() and 
           not value.endswith(suffixes) and
           not any(th in value for th in TerminateHook)):
           newRow.append(value)
    print(newRow)

相关内容

  • 没有找到相关文章

最新更新