我无法理解为什么我的方法中的内部循环没有产生我期望的行为,我希望有人能帮助我理解这个问题。
我的方法采用一系列参数 (*args
),如果参数是整数,我想在整数周围添加美元符号(例如 $5$
) .
def t_row(*args):
columns = 5
if len(args) == columns:
count = 0
for value in args:
if type(value) is int:
value = ''.join(('$', str(value), '$'))
count += 1
if count < len(args):
penult_args = args[:-1]
line_prefix = [''.join((str(value), " & ")) for value in penult_args]
elif count == len(args):
line_suffix = [''.join((str(value), " \\\\", "\n"))]
count += 1
line_list = line_prefix + line_suffix
line = ''.join(item for item in line_list)
return(line)
上面的代码是这样使用的:
>>> s = q.t_row('data1', 'data2', 3, 'data4', 5)
>>> print s
data1 & data2 & 3 & data4 & $5$ \\
为什么我在整数 3 周围没有美元符号?我该如何修复我的代码以更正此问题?
最佳答案
因为在这条线上:
line_prefix = [''.join((str(value), " & ")) for value in penult_args]
你从原始列表中提取值(减去最后一项),而在这一行:
value = ''.join(('$', str(value), '$'))
您添加了 $
但从未将值存储回列表中。
5
只得到 $
因为它是最后一项,所以你直接引用它:
line_suffix = [''.join((str(value), " \\\\", "\n"))]
完成这一切的更好方法是:
def t_row(self, *args):
if len(args) == self.columns:
result = []
for value in args:
if isinstance(value, int):
result.append('$%d$' % value)
else:
result.append(value)
return ' $ '.join(result) + r' \\'
作为单行,应该是
t_row = lambda self, *args: (' $ '.join('$%d$' %
value if isinstance(value, int) else value for value in args) + r' \\'
if len(args) == self.columns else None)
但这实际上不是一个好主意。
关于python - 帮助 Python 方法中的内部循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7549858/