我想对齐(这里是简单方程式列表的左侧,当前是字符串)。基本的例子是:
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 transformation 和 Most 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
答案 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