使用本地函数/中间变量提高pythons列表的含义以提高可读性

时间:2015-11-02 08:04:45

标签: python performance list-comprehension code-readability

我想对齐(这里是简单方程式列表的左侧,当前是字符串)。基本的例子是:

414 / 46 = 9
3 / 1 = 3
114 / 38 = 3

给定代码将返回此对齐(在示例resp。“=”)列表中:

414 / 46 = 9
   3 / 1 = 3
114 / 38 = 3

列表可能变得很大(通过有限的目标平台)。

现在我把一个嵌套的列表理解表达式破解了。 此代码中的两个表达式都有效。 但是向其他编码员展示我在可读性/代码效率方面遇到了一些“阻力”。我喜欢创建其他(新鲜的,也有经验的)编码器可以快速理解的代码。另一方面,这可能不会使目标系统过度紧张。

关注Intermediate variable in a list comprehension for simultaneous filtering and transformationMost elegant way to modify elements of nested lists in place暗示有时候列表理解不是正确的工具

使用普通循环 for e in l我没有看到如何就地交换列表中的等式stings。

我可以将表达式转换为一些旧的c风格的索引循环 for i in xrange循环,并将新的(修剪的)lexpr方程式分配给给定的索引。

我想更好地了解在哪里使用哪些选项(也许为什么)? 在这两个方面:了解他人的代码和表现。

我尝试了这两个变体(注释行):

def trim_equations_lwidth( equation_list, width ):
  '''expects string-expressions like "1 + 3 = x" 
  and trims all of the left expr to same width. 
  Expects width to be >= length of lexp
  '''
  #ltrimmed_equations = [ equation.replace( equation[:equation.find('=')], equation[:equation.find('=')].rjust(width, ' ')) for (equation) in equation_list ]
  ltrimmed_equations = [ equation.replace(lexpr, lexpr.rjust(width, ' ')) for (lexpr, equation) in ( ( equ[:equ.find('=')], equ)  for (equ) in equation_list )]

  return ltrimmed_equations

1 个答案:

答案 0 :(得分:1)

我建议使用本地功能:

def trim_equations_lwidth( equation_list, width ):
  '''expects string-expressions like "1 + 3 = x" 
  and trims all of the left expr to same width. 
  Expects width to be >= length of lexp
  '''

  def _replace(equation):
     lexpr = equation[:equation.find('=')]
     return equation.replace(lexpr, lexpr.rjust(width, ' '))

  ltrimmed_equations = [_replace(equation) for equation in equation_list]

  return ltrimmed_equations