【发布时间】:2021-06-18 04:42:05
【问题描述】:
我正在尝试“将元素列表映射到另一个列表中的元素范围以创建唯一矩阵。”让我用一张图来解释。
我希望这是有道理的。
这是受到 Google Kickstart 比赛的启发,这意味着这不是比赛完全要求的问题。
但我想到了这个问题,觉得值得探讨。
但我被自己困住了,无法继续前进。
这是我的代码,这显然不是正确的解决方案。
values = input("please enter your input: ")
values = values.split()
values = [int(i) for i in values]
>>> please enter your input: 2 4 3 1 0 0 1 0 1 1 0 0 1 1 0 6 4 1 0 0 0 1 0 0 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 0
rows_columns = []
matrix = []
for i in values:
if i > 1:
rows_columns[:1].append(i) # The "2" at the very beginning indicates how many matrices should be formed
elif i <= 1:
matrix.append(i)
rows_columns[:1]
>>> [4, 3, 6, 4]
matrix_all = []
for i in range(1, len(rows_columns)):
matrix_sub = []
for j in range(rows_columns[i]):
matrix_sub.append(matrix[j])
if matrix_sub not in matrix_all:
matrix_all.append(matrix_sub)
>>> [[1, 0, 0, 1], [1, 0, 0], [1, 0, 0, 1, 0, 1], [1, 0, 0, 1]]
我真的想知道嵌套循环是否是解决这个问题的好主意。这是我最近几个小时能想到的最好方法。我想得到的最终结果如下所示。
鉴于有关于一个列表上的矩阵应该有多少行和列的信息,以及在另一个列表上形成矩阵的足够数量的元素,映射(或创建)两者的解决方案是什么根据列表上的维度信息,从另一个列表中提取矩阵?
希望清楚,不明白的时候告诉我。
谢谢!
【问题讨论】:
-
你考虑过 numpy 吗?如果我理解您想要实现的目标,它将一个平面数字列表转换为一组二维矩阵。使用 numpy 应该非常简单且高效。
-
是的,我知道,但我不想使用任何内部/外部模块来解决这个问题。我不记得你说的numpy方法了,也许我可以搜索一下。但我不知道使用 numpy 是否真的显示了我的编程能力。如果您要自己解决它,您有什么建议吗?你会像我尝试的那样使用嵌套循环还是使用其他逻辑?
-
无需重新发明轮子。高效总是很重要的,因为 Python 有许多高效的模块,知道何时以及如何使用正确的模块,将使您节省时间和精力,并显示您在这方面的效率。