【问题标题】:Python - replace prints by a function [closed]Python - 用函数替换打印[关闭]
【发布时间】:2018-08-28 21:00:17
【问题描述】:

我有什么:

import numpy as np
l = np.array([['a11','a12'],['a21','a22']])
layout = '{!s:6}'*2
for i in range(np.shape(l)[1]):
    print(layout.format(*l[i]))

输出:

a11   a12   
a21   a22

我想要什么:

def table (two_dim_array):
    (i,j) = np.shape (two_dim_array)
    layout = '{!s:6}'*j
    #for k in range (i):
        #return layout.format(*two_dim_array[k])
    return 'a string that matches the table printed above'

我猜上面的代码是不言自明的。我想以函数的形式重写上述输出,该函数将输出与上述打印匹配的字符串。

【问题讨论】:

  • 嗨,андрэ,我不太明白。这段代码目前做了什么,你希望它做什么?此外,“#output”之后的两行让我认为如果我尝试运行它就不会编译;这些应该是非代码块吗?

标签: python string python-3.x numpy


【解决方案1】:

print(x)x\n 写入标准输出。所以,你基本上想用return_value += x + '\n'替换每个print(x)

因此:

return_value = ''
for i in range(np.shape(l)[1]):
    return_value += layout.format(*l[i]) + '\n'
return return_value

另一种方法是使用str.join 和生成器表达式:

return '\n'.join(layout.format(*l[i]) for i in range(np.shape(l)[1]))

但话又说回来,您也不需要 layout = '{!s:6}'*j 部分:

return '\n'.join(''.join('{!s:6}'.format(cell) for cell in row)
                 for row in two_dim_array)

【讨论】:

  • 很清楚。这个生成器表达式非常有趣。让我想起了列表理解。
【解决方案2】:

或多或少将print替换为return

def table (two_dim_array):
    layout = '{!s:6}' * two_dim_array.shape[1]    
    return '\n'.join(layout.format(*row) for row in two_dim_array)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    相关资源
    最近更新 更多