python - 如何重构此 python 代码块以提高效率

标签 python

此代码块有效 - 它循环遍历具有重复数据集的文件 并提取出每组的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/

相关文章:

python - 如何处理同一张图上多个对象监听motion_notify_event

Python:将字符串转换为压缩十六进制 ( '01020304' -> '\x01\x02\x03\x04' )

python - 如何将不同的数据从 View 传递到模板?

python - 数组组合值

python - 是否可以更改 IPython 的 pretty-print ?

python - numpy:使用 OR 将多个赋值转换为单个赋值

python - SymPy 无法求解四阶多项式方程

Python-判断给定字符串是否只有 1 个字符重复的最有效方法是什么?

获取两个列表相交的项目索引的Pythonic方法

python - PyQt5 中带有可点击文本的 QPlainTextEdit 小部件