gpt4 book ai didi

python - Python中将数组转换为二维矩阵时出错

转载 作者:行者123 更新时间:2023-12-01 02:25:39 25 4
gpt4 key购买 nike

我对该算法的输出有疑问。 例如:对于输入 chunk([1, 2, 3, 4, 5, 6, 7, 8], 3) 它应该返回 [[ 1 , 2, 3], [4, 5, 6], [7, 8, '']] 但它返回 [[7, 8, 6], [7, 8, 6] ,[7,8,6]]

但是,当在循环 for r in range(rows): 下定义 m_list 时,它会返回正确的值。

如果 m_list 是在循环 for r in range(rows): 之外定义的,我无法弄清楚为什么它会返回错误的值。可能是什么原因?

# --- Directions
# Given an array and chunk size, divide the array into many subarrays
# where each subarray is of length size
# --- Examples
# chunk([1, 2, 3, 4], 2) --> [[ 1, 2], [3, 4]]
# chunk([1, 2, 3, 4, 5], 2) --> [[ 1, 2], [3, 4], [5, '']]
# chunk([1, 2, 3, 4, 5, 6, 7], 3) --> [[ 1, 2, 3], [4, 5, 6], [7, '', '']]

import math

def chunk (array, size):
rows = 0
l = len(array)

if l % size == 0:
rows = l/size
else:
rows = int(math.floor(l/size) + 1)


m_list = ['' for e in range(size)]

m_matrix = [['' for g in range(size)] for w in range(rows)]

i = 0

for r in range(rows):
for u in range(size):
if i == l:
break
else:
m_list[u] = array[i]
i += 1

m_matrix[r] = m_list

return m_matrix




length = int(raw_input('how many elements you want in the array?: '))

m_inputArray = ['' for q in range(length)]
print 'Debug0:--> ' + str(m_inputArray)
for z in range(length):
p = int(raw_input('Enter the value at index %i: ' %(z)))
m_inputArray[z] = p

m_inputSize = int(raw_input('Enter the size: '))


result = chunk(m_inputArray, m_inputSize)
print result

最佳答案

您的代码有几个问题。首先,u 的每个循环的 m_list 的起始值是前一个列表(因此第一次是 ['','',''] 但第二次是[1,2,3],第三次是[4,5,6]。这意味着从第三次开始当数组中只剩下一个值时,仅重新定义 m_list 中的第一个值,从而产生 [7,5,6] 的 m_list。

其次,通过说:m_matrix[u] = m_list,您正在创建对 m_list 的引用,而不是将 m_list 复制到 m_matrix。这意味着一旦 m_list 发生变化,m_matrix 中的值也会发生变化。这意味着最终您将把 m_matrix 定义为 [m_list,m_list,m_list],从而得到 [[7,5,6] 的结果,[7,5,6],[7,5,6]]。解决方案是制作 m_list 的切片,如下所示:m_matrix = m_list[:]

这就是我做整个事情的方式:

def chunk(inputarray,size):

array = inputarray[:]
m_matrix = []


while len(array) > 0:
if len(array[:size]) < size:
array.extend(['' for j in range(size-len(array[:size]))])
m_matrix.append(array[:size])
del array[:size]


return m_matrix

如果您不再需要原始数组,您还可以删除 array = inputarray[:] 代码行。另外,可能不是最快/最好的方法,但我只是想快速提供一些东西。这是在 python 2.7 中完成的,因此如果您使用其他版本,您可能需要更改一些内容。

关于python - Python中将数组转换为二维矩阵时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47433987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com