为了账号安全,请及时绑定邮箱和手机立即绑定

字符串到python中的n * n矩阵

字符串到python中的n * n矩阵

慕莱坞森 2021-11-09 16:32:23
我是一名热爱编程的本科生。我今天遇到了一个问题,我不知道如何解决这个问题。我寻找“Python - 字符串到矩阵表示”(Python - 字符串到矩阵表示)寻求帮助,但我仍然对这个问题感到困惑。问题在于:给定一串空格分隔的数字,创建一个 nxn 矩阵(一个二维列表,其中列数与行数相同)并返回它。该字符串将包含整数的完美平方数。int() 和 split() 函数可能很有用。例子:输入:'1 2 3 4 5 6 7 8 9'输出:[[1,2,3],[4,5,6],[7,8,9]]示例 2:输入:'1'输出:[[1]]我的答案:import numpy as npdef string_to_matrix(str_in):    str_in_split = str_in.split()    answer = []    for element in str_in_split:        newarray = []    for number in element.split():        newarray.append(int(number))    answer.append(newarray)    print (answer)测试结果如下:Traceback (most recent call last):  File "/grade/run/test.py", line 20, in test_whitespace    self.assertEqual(string_to_matrix('1      2 3   4'), [[1,2],[3,4]])AssertionError: None != [[1, 2], [3, 4]]Stdout:[[4]]也Traceback (most recent call last):  File "/grade/run/test.py", line 15, in test_small    self.assertEqual(string_to_matrix('1 2 3 4'), [[1,2],[3,4]])AssertionError: None != [[1, 2], [3, 4]]Stdout:[[4]]也Traceback (most recent call last):  File "/grade/run/test.py", line 10, in test_one    self.assertEqual(string_to_matrix('1'), [[1]])AssertionError: None != [[1]]Stdout:[[1]]也Traceback (most recent call last):  File "/grade/run/test.py", line 25, in test_larger    self.assertEqual(string_to_matrix('4 3 2 1 8 7 6 5 12 11 10 9 16 15 14 13'), [[4,3,2,1], [8,7,6,5], [12,11,10,9], [16,15,14,13]])AssertionError: None != [[4, 3, 2, 1], [8, 7, 6, 5], [12, 11, 10, 9], [16, 15, 14, 13]]Stdout:[[13]]我仍然困惑如何解决这个问题。非常感谢您的帮助!
查看完整描述

3 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

假设您不想要numpy并且想要使用列表列表:


def string_to_matrix(str_in):

    nums = str_in.split()

    n = int(len(nums) ** 0.5)

    return list(map(list, zip(*[map(int, nums)] * n)))

nums = str_in.split()由任何空格分割,n是结果的边长,map(int, nums)将数字转换为整数(从字符串),zip(*[map(int, nums)] * n)将数字分组为的组n,list(map(list, zip(*[map(int, nums)] * n)))将生成的元组转换zip为列表。


查看完整回答
反对 回复 2021-11-09
?
森栏

TA贡献1810条经验 获得超5个赞

假设你想让这个动态。


str_in = '1 2 3 4 5 6 7 8 9'

a = str_in.split(" ")

r_shape = int(math.sqrt(len(a)))

np.array([int(x) for x in a]).reshape(r_shape, r_shape)


查看完整回答
反对 回复 2021-11-09
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

import numpy as np

def string_to_matrix(str_in):

   str_in_split = str_in.split()

   numbers = list(map(int, str_in_split))

   size = r_shape = int(np.sqrt(len(numbers)))

   return np.array(numbers).reshape(r_shape, r_shape)

这就是为什么你总是得到: AssertionError: None != ...


assertEqual(A, string_to_matrix("..."))验证是否A等于 string_to_matrix 返回的值。在您的代码中,您不返回任何内容,因此None


另一个问题是如何拆分字符串,更简单的选择是拆分所有内容并转换为数字,然后重新整形为 sqrt(元素数)。这假设输入长度可以被拆分以形成一个 nxn 矩阵


查看完整回答
反对 回复 2021-11-09
  • 3 回答
  • 0 关注
  • 498 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信