这段代码可以进一步优化吗?

时间:2010-06-15 14:33:12

标签: python

我知道下面给出的代码不会被完全理解,除非我解释我的整个前一行和下一行代码。 但这是代码的一部分,这会导致我的项目出现如此多的延迟,并希望对其进行优化。 我想知道哪个代码部分有问题,怎么可以替换它。 我想,很少有人可以说这个功能的使用比较繁重,而其他方法可以用来做这项工作

请帮忙,

提前致谢

for i in range(len(lists)):
    save=database_index[lists[i]]
    #print save
    #if save[1]!='text0194'and save[1]!='text0526':
    using_data[save[0]]=save
    p=os.path.join("c:/begpython/wavnk/",str(str(str(save[1]).replace('phone','text'))+'.pm'))
    x1=open(p , 'r')
    x2=open(p ,'r')
    for i in range(6):
        x1.readline()
        x2.readline()
    gen = (float(line.partition(' ')[0]) for line in x1)
    r= min(enumerate(gen), key=lambda x: abs(x[1] - float(save[4])))
    #print r[0]
    a1=linecache.getline(str(str(p).replace('.pm','.mcep')), (r[0]+1))
    #print a1
    p1=str(str(a1).rstrip('\n')).split(' ')
    #print p1
    join_cost_index_end[save[0]]=p1
    #print join_cost_index_end

    gen = (float(line.partition(' ')[0]) for line in x2)
    r= min(enumerate(gen), key=lambda x: abs(x[1] - float(save[3])))
    #print r[0]
    a2=linecache.getline(str(str(p).replace('.pm','.mcep')), (r[0]+1))
    #print a2
    p2=str(str(a2).rstrip('\n')).split(' ')
    #print p2
    join_cost_index_strt[save[0]]=p2
    #print join_cost_index_strt
    j=j+1

    #print j
    #print join_cost_index_end
    #print join_cost_index_strt
    enter code here

这里我的database_index有大约2,50,000个条目

2 个答案:

答案 0 :(得分:2)

def get_list(file, cmp, fout):
    ind, _ = min(enumerate(file), key=lambda x: abs(x[1] - cmp))
    return fout[ind].rstrip('\n').split(' ')

root = r'c:\begpython\wavnk'
header = 6
for lst in lists:
    save = database_index[lst]
    index, base, _, abs2, abs1, *_ = save
    using_data[index] = save

    base = os.path.join(root, base.replace('phone', 'text'))
    fin, fout = base + '.pm', base + '.mcep'
    file = open(fin)
    fout = open(fout).readlines()
    [next(file) for _ in range(header)]
    file = [float(line.partition(' ')[0]) for line in file]
    join_cost_index_end[index] = get_list(file, float(abs1), fout)
    join_cost_index_strt[index] = get_list(file, float(abs2), fout)

不要:

  1. 多次将字符串转换为字符串,它将保持字符串
  2. 在循环外转换时可以在循环中转换值
  3. 使用单字母表示含义变量
  4. 使用range(len(sequence))
  5. 迭代序列
  6. 复制粘贴代码:使用函数
  7. 使用任何代码而不先阅读文档
  8. 依靠SO进行心灵调试。

答案 1 :(得分:1)

x1=open(p , 'r')
x2=open(p ,'r')

为什么要两次打开同一个文件?你期待它改变吗?