python-3.x 使用2D数组从(row,column,value)的元组列表构建电子表格,no numpy

xfb7svmp  于 2023-04-08  发布在  Python
关注(0)|答案(1)|浏览(107)

Hi,I took a class of python as one of the“side”course〉I am new to python and only learn python via internet/free course so I have no idea or how to.在基于数组的电子表格实现中,我们使用Python列表电子表格是单元格的2D结构,并且每个单元格可以保存不同的数据类型,例如,一般,数字等。对于这个任务,我们将集中在单元格只持有浮点数。因此,要实现一个电子表格,我们将需要实现一个2D数组。2D数组由元组索引例如,如果我们使用数字索引行,使用字母索引列,我们可能会有(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?]]

6vl6ewon

6vl6ewon1#

你可以按照@Michael Butscher的建议来修复你的代码,另一种方法,在我看来更简单,是用所有的None初始化一个2d列表,然后使用多维索引来填充适当的值,下面是方法:

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)

如果需要更高的性能,则可以在arr上的单次迭代中计算max_rowmax_col

相关问题