使用二维数组从(行、列、值)的元组列表构建电子表格。没有 numpy

问题描述 投票:0回答:1

嗨,我选了一门 python 作为“副”课程> 我是 python 的新手,只通过互联网/免费课程学习 python,所以我不知道也不知道怎么做。 在基于数组的电子表格实现中,我们使用 Python 列表(一种数据结构)作为 实现电子表格常用操作的基础。电子表格是单元格的二维结构, 每个单元格可以保存不同的数据类型,例如,通用、数字等。对于这个作业,我们将 专注于只持有浮点数的细胞。因此,要实现电子表格,我们需要实现 一个二维数组。 二维数组由电子表格中的元组(行,列)索引。一个例子是如果我们使用 索引行的数字和列的字母,我们可能有 (10,8) 来指定第 11 个单元格 行,第 9 列(我们假设索引从 0 开始)。

arr = [[0, 0, 9], [0, 1, 2], [0, 2, 2.0], [1, 0, 2], [1, 1, 5], [1, 2, 7], [2, 0, 3], [2, 1, 6]]
w, h = 0, 0
curRow = [];
ssheet = [[0 for x in range(w)] for y in range(h)]
for i in range(0, 3):
    print("loop i ", i)
    for cell in arr:
        print("loop cell", i, cell)

        if cell[0] == i:
            print(cell)
            print(cell[2], end="<-cell2/ currow->")
            curRow.append(cell[2])
            print(curRow)

ssheet.insert(0, curRow)
print(ssheet, "sheet")

这就是我得到的

[[9, 2, 2.0, 2, 5, 7, 3, 6]] sheet

这就是我想要的

[[9, 2, 2.0], [2, 5, 7], [3, 6, None?]]
床单

python python-3.x multidimensional-array
1个回答
0
投票

您可以按照@Michael Butscher 的建议来修复您的代码,另一种方法,在我看来更简单,是用所有

None
初始化一个二维列表,然后使用多维索引用适当的值填充它,这是方法:

arr = [[0, 0, 9], [0, 1, 2], [0, 2, 2.0], [1, 0, 2], [1, 1, 5], [1, 2, 7], [2, 0, 3], [2, 1, 6]]

# Determine the dimensions of the 2D array
max_row = max(arr, key=lambda x: x[0])[0]
max_col = max(arr, key=lambda x: x[1])[1]

# Create the 2D array
ssheet = [[None for j in range(max_col + 1)] for i in range(max_row + 1)]

# Fill in the 2D array with values from arr
for cell in arr:
    row, col, val = cell
    ssheet[row][col] = val

# Print the 2D array
for row in ssheet:
    print(row)
如果需要更高的性能,

max_row
max_col
可以在
arr
的单次迭代中计算。

© www.soinside.com 2019 - 2024. All rights reserved.