Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
__str__;来自我自己的矩阵python_Python_String_Class_Matrix - Fatal编程技术网

__str__;来自我自己的矩阵python

__str__;来自我自己的矩阵python,python,string,class,matrix,Python,String,Class,Matrix,我正在制作自己的矩阵模块(我知道numpy是存在的),但我不太确定如何构建我的\uu str\uu。我的矩阵是这样的 for _ in range(rows): self.matrixRC.append([2 for _ in range(colls)]) def __init__(self, rows = 10, colls = 10): self.matrixRC = [] for _ in range(colls): self.matrix

我正在制作自己的矩阵模块(我知道numpy是存在的),但我不太确定如何构建我的
\uu str\uu
。我的矩阵是这样的

for _ in range(rows):
        self.matrixRC.append([2 for _ in range(colls)])
def __init__(self, rows = 10, colls = 10):
    self.matrixRC = []
    for _ in range(colls):
        self.matrixRC.append([2 for _ in range(rows)])
这里我用
int
2填充我的矩阵。如果我们只说
rows=5
calls=3
,那么当我打印它时就会得到这个值

[[2, 2, 2],[2, 2, 2],[2, 2, 2],[2, 2, 2],[2, 2, 2]]
但是我想

222
222
222
222
222
有人知道一种简单的“Python”方法来实现这一点吗

这是
\uuuu init\uuuuu

def __init__(self, rows = 10, colls = 10):
    self.matrixRC = []
    for _ in range(rows):
        self.matrixRC.append([2 for _ in range(colls)])
对于
行coll
的事情。。。这只是一个奇怪的想法,我仍然很难想到这个任意矩阵。但是现在应该正确处理
行和列。如果更容易使
\uuuu init\uuuu
像这样

for _ in range(rows):
        self.matrixRC.append([2 for _ in range(colls)])
def __init__(self, rows = 10, colls = 10):
    self.matrixRC = []
    for _ in range(colls):
        self.matrixRC.append([2 for _ in range(rows)])

这也很好

您可以使用
str.join
方法来实现。内部循环将行项目转换为字符串,并将其与作为分隔符的空字符串连接,外部循环将行字符串与换行符连接

class Test:
    def fill(self, rows, cols, val):
        self.matrixRC = [[val] * cols for _ in range(rows)]

    def __str__(self):
        return '\n'.join(''.join(map(str, row)) for row in self.matrixRC)

t = Test()
t.fill(5, 3, 2)
print(t)
输出

222
222
222
222
222

如果您决定行项目之间确实需要分隔符,只需修改内部
的字符串

'\n'.join(' | '.join(map(str, row)) for row in self.matrixRC)   
给我们

2 | 2 | 2
2 | 2 | 2
2 | 2 | 2
2 | 2 | 2
2 | 2 | 2

有些人,包括Guido,不喜欢
map
函数。实际上,将
.join
方法传递给列表比传递给生成器更有效。因此,该
\uuuu str\uuu
方法的一个更具python风格的版本是:

def __str__(self):
    return '\n'.join([''.join([str(u) for u in row]) for row in self.matrixRC])
我们还可以通过分离两个循环使代码更具可读性:

def __str__(self):
    out = []
    for row in self.matrixRC:
        out.append(''.join([str(u) for u in row]))
    return '\n'.join(out)

你能发布matrixRC类的代码吗?确实有一个简单的方法,你的类代码会很有帮助。为什么不在行项目之间使用分隔符呢?它们总是一位数字吗?那么你的
填充
是我的
\uuuu init\uuuu
的一个简单版本,你的
\uu str\uuuuu
将行与
'/n'
连接,并将这些行中的项目连接起来,但没有任何正确的地方?@BrendanMesters我在等待你回复我的评论时编写了这段代码,在您发布
\uuuu init\uuuu
代码之前,是的,它与您的代码基本相同。是的,我的
\uu str\uu
'\n'
连接行,并用空字符串连接这些行中的项目。@BrendanMesters我们可以安全地使用
[val]*cols
生成每一行,因为
val
是一个
int
,它是不可变的。如果
val
是一个可变对象(例如列表),那就不安全了,因为
[val]*cols
生成一个列表,其中包含对同一
val
对象的
引用。可能值得一提的是:
(map(str,row))
相当于
(str(x)表示行中的x)
。在我看来,稍长一点的版本更容易阅读。@Arthurtaca公平点。我已经更新了我的答案。FWIW,我最近一直在使用
map
,所以我现在发现它比较长的版本更可读