【问题标题】:How to create 2D matrix with single line input如何使用单行输入创建二维矩阵
【发布时间】:2023-12-10 04:38:02
【问题描述】:

我一直在尝试使用单行输入创建一个矩阵,例如,如果我输入“1 2 3”,它应该像 l[0][0]=[1,2,3]

for i in range(num):
  for j in range(num):
    l[i][j] = input().spilt()

它给出的索引超出范围错误,我理解它为什么给出, 因为我们在循环点修复 j 索引,这意味着我们将它锁定到一个条目并提供多个输入,这是矛盾的,为了移除限制器,我将其修改如下:

for i in range(num):
  l[i] = input().spilt()

我知道这完全错了,它离二维矩阵很远,但我完全搞砸了。

【问题讨论】:

  • 你想要的输出是什么?
  • index out of rangel[i][j] 表达式针对 ij 的某个值引发。显然l 是一个列表或列表列表,并且没有num 范围那么大。在不知道您是如何创建l 的情况下,我们真的无法帮助您。您当然可以将列表['1','2','3'] 放在另一个列表中。
  • 在某种程度上,您将 Python 列表与 numpy 数组(可能还有 np.matrix 数组子类)混淆了。

标签: python python-3.x list numpy matrix


【解决方案1】:

根据您的描述,您似乎想要执行以下操作:

l = []
for _ in range(num):
    l.append(input().split())

请注意,split() 返回的是字符串(输入的一部分)而不是整数。如果您想要数字列表(即floatint)列表,那么您需要将字符串转换为适当类型的数字:

l = []
for _ in range(num):
    l.append(list(map(float, input().split()))) # float <-> int (if needed)

或者,如果你坚持单行:

l = [list(map(float, input().split())) for _ in range(num)]

另请注意,Python 没有二维 数组 的概念。这是numpy 包中的一个概念。您还用numpy 标记了您的问题。因此,如果您的目的是输入一个方形 2D numpy 数组,您可以执行以下操作:

import numpy as np
l = np.array([input('Enter line: ').split() for _ in range(num)], dtype=np.float)

例子:

In [18]: np.array([input('Enter line: ').split() for _ in range(num)], dtype=np.float)
Enter line: 1 2 3
Enter line: 4 5 6
Enter line: 7 8 9
Out[18]: 
array([[1., 2., 3.],
       [4., 5., 6.],
       [7., 8., 9.]])

【讨论】:

    最近更新 更多