此代码块有效 - 它循环遍历具有重复数据集的文件 并提取出每组的5条信息。
但我知道当前的因式分解效率不高,因为它在循环 通过找到的每一行的每个键。
想知道是否有一些 Python 大师可以提供更好的方法来更有效地完成此任务。
def parse_params(num_of_params,lines):
for line in lines:
for p in range(1,num_of_params + 1,1):
nam = "model.paramName "+str(p)+" "
par = "model.paramValue "+str(p)+" "
opt = "model.optimizeParam "+str(p)+" "
low = "model.paramLowerBound "+str(p)+" "
upp = "model.paramUpperBound "+str(p)+" "
keys = [nam,par,opt,low,upp]
for key in keys:
if key in line:
a,val = line.split(key)
if key == nam: names.append(val.rstrip())
if key == par: params.append(val.rstrip())
if key == opt: optimize.append(val.rstrip())
if key == upp: upper.append(val.rstrip())
if key == low: lower.append(val.rstrip())
print "Names = ",names
print "Params = ",params
print "Optimize = ",optimize
print "Upper = ",upper
print "Lower = ",lower
最佳答案
虽然这没有回答您的问题(其他答案正在解决),但对我做与您正在做的事情类似的事情有很大帮助的是 List Comprehensions .它们允许您以简洁且(我认为)易于阅读的方式构建列表。
例如,下面的代码构建了一个二维数组,其中包含您要获取的值。 some_funct
这里会是一个小正则表达式,如果我这样做的话,它使用键中最后一个空格的索引作为参数,并向前看以收集您要获取的值该行(对应于当前正在查看的键的值)并将其附加到 seen_keys 二维数组中的正确索引。
冗长,是的,但是如果您理解列表并且能够构建正则表达式来做到这一点,那么您就有了一个很好、简洁的解决方案。
keys = ["model.paramName ","model.paramValue ","model.optimizeParam ""model.paramLowerBound ","model.paramUpperBound "]
for line in lines:
seen_keys = [[],[],[],[],[]]
[seen_keys[keys.index(k)].some_funct(line.index(k) for k in keys if k in line]
关于python - 如何重构此 python 代码块以提高效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1933564/