Python中如何实现二维列表的Numpy风格格式化控制台输出
实现调用方法对象时输出规整的二维列表格式
要实现调用print(a.get_ranking_matrix)(不带括号)时输出空格分隔的规整二维列表格式,核心是解决直接打印方法对象会输出默认绑定方法信息的问题,以下是两种可行实现方式:
方案一:使用@property装饰器 + 自定义矩阵包装类
这种方式将原方法转为属性,同时通过自定义类控制输出格式,既满足打印需求,又保留原始矩阵的可访问性。
步骤1:定义格式化矩阵的包装类
创建一个类,重写__str__方法实现自定义打印格式:
class FormattedMatrix: def __init__(self, matrix): self.matrix = matrix # 保存原始二维列表 def __str__(self): # 将每行元素转为字符串并用空格连接,再将所有行用换行符拼接 return '\n'.join(' '.join(map(str, row)) for row in self.matrix) def __repr__(self): # 让repr与str输出一致,确保交互环境中直接输出也能显示规整格式 return self.__str__()
步骤2:修改原类的方法为属性
将get_ranking_matrix方法通过@property装饰器转为属性,返回包装后的矩阵对象:
class Ranking: def __init__(self): self.ranking_matrix = [[2, 1, 4, 3, 6, 5], [3, 1, 4, 6, 5, 2], [4, 1, 2, 6, 3, 5], [2, 1, 3, 4, 5, 6], [2, 1, 4, 5, 6, 3], [2, 1, 4, 6, 5, 3]] @property def get_ranking_matrix(self): return FormattedMatrix(self.ranking_matrix)
使用效果
a = Ranking() print(a.get_ranking_matrix)
输出:
2 1 4 3 6 5 3 1 4 6 5 2 4 1 2 6 3 5 2 1 3 4 5 6 2 1 4 5 6 3 2 1 4 6 5 3
如果需要获取原始二维列表,可通过a.get_ranking_matrix.matrix访问。
方案二:直接在@property中返回可打印对象(简化版)
如果不需要保留原始矩阵的直接访问(或可通过原实例属性self.ranking_matrix获取),可以简化实现,无需额外包装类:
class Ranking: def __init__(self): self.ranking_matrix = [[2, 1, 4, 3, 6, 5], [3, 1, 4, 6, 5, 2], [4, 1, 2, 6, 3, 5], [2, 1, 3, 4, 5, 6], [2, 1, 4, 5, 6, 3], [2, 1, 4, 6, 5, 3]] @property def get_ranking_matrix(self): # 定义一个匿名类,仅实现__str__方法 class _Matrix: def __str__(self): return '\n'.join(' '.join(map(str, row)) for row in self.ranking_matrix) return _Matrix()
这种方式同样能实现目标打印效果,但无法直接通过get_ranking_matrix获取原始列表,需通过实例的ranking_matrix属性访问。
内容的提问来源于stack exchange,提问作者jaroslaw
相关产品推荐
相关产品推荐

