是否可以使用元组索引查找列表的长度



我基本上是在尝试重新创建numpy的整形函数。用户输入一个列表和一个元组。元组决定矩阵的维数。

我查找行和列的想法是:

取元组索引的第一个或第二个元素处输入列表的长度。因此,如果元组的第一个元素是3,那么它应该取数组前3个元素的len。

def reshape(array: list, rows_columns: tuple):

columns = [len(array(rows_columns[1]))]

rows = [len(array(rows_columns[0]))]

matrix = (rows, columns)
return matrix

reshape([1, 2, 3, 4], (2, 2))

但这是不可能的,我得到了TypeError:"list"对象不可调用。我只是想知道我是不是想错了。

我认为这就是你应该考虑的问题。代码会预先对参数进行一些验证,以确保一致性。然后,它循环通过所传递的array获取切片,其中每个切片(新列表(将是下一行,其大小为列宽,并且该新列表被附加到最初空的results列表(请参见list.append(:

def reshape(array: list, rows_columns: tuple):
l = len(array)
assert len(rows_columns) == 2
n_rows = rows_columns[0]
n_columns = rows_columns[1]
assert n_rows * n_columns == l
results = []
index = 0
for _ in range(n_rows):
results.append(array[index:index+n_columns])
index += n_columns
return results
print(reshape([1, 2, 3, 4], (2, 2)))
print(reshape([1, 2, 3, 4], (4, 1)))
print(reshape([1, 2, 3, 4], (1, 4)))
print(reshape([1, 2, 3, 4, 5, 6, 7, 8], (4, 2)))

打印:

[[1, 2], [3, 4]]
[[1], [2], [3], [4]]
[[1, 2, 3, 4]]
[[1, 2], [3, 4], [5, 6], [7, 8]]
import math
import typing as t
def reshape(sequence: t.Sequence, shape: t.Tuple[int, ...]) -> t.Sequence:
assert len(sequence) == math.prod(shape)
for n in shape[:-1]:
sequence = [sequence[i:i + n] for i in range(0, len(sequence), n)]
return sequence

最新更新