Python创建普通数组的多维数组

Python创建普通数组的多维数组,python,arrays,python-3.x,lis,Python,Arrays,Python 3.x,Lis,我想用普通数组创建一个多维数组。当我的起始数组中有0时,我想将行号改为1 我的开始数组如下所示: arr = [1, 2, 3, 0, 4, 5, 6, 0, 7, 8, 9] multi_arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 我的futre multi阵列应如下所示: arr = [1, 2, 3, 0, 4, 5, 6, 0, 7, 8, 9] multi_arr = [[1, 2, 3],

我想用普通数组创建一个多维数组。当我的起始数组中有0时,我想将行号改为1

我的开始数组如下所示:

arr = [1, 2, 3, 0, 4, 5, 6, 0, 7, 8, 9]
multi_arr = [[1, 2, 3],
             [4, 5, 6],
             [7, 8, 9]]
我的futre multi阵列应如下所示:

arr = [1, 2, 3, 0, 4, 5, 6, 0, 7, 8, 9]
multi_arr = [[1, 2, 3],
             [4, 5, 6],
             [7, 8, 9]]
到目前为止,我的代码如下所示:

multi_arr = []
end = len(arr)
i = 0   #row
j = 0   #column

for h in range(end):

   if arr[h] != 0:
       j += 1
       multi_arr[i][j]= arr[h]

   elif arr[i] != 0:
       i += 1

这段代码总是出现列表索引错误。

这应该以更简单的方式完成这项工作:

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

multi_arr = []

temp_arr = []
for h in arr:
    if h != 0:
        temp_arr.append(h)
    else:
        multi_arr.append(temp_arr)
        temp_arr = []

if h != 0:  # Insert the last array it the last number wasn't 0
    multi_arr.append(temp_arr)

print(multi_arr)

之所以会出现这种情况,是因为在您尝试设置
multi_arr[i][j]
时,它仍然是一个
1-d数组。您可以使用打印语句或调试器对此进行验证,如下所示:

范围内h的
(结束):
如果arr[h]!=0:
打印(多页)
j+=1
多重arr[i][j]=arr[h]
艾利夫·阿尔[i]!=0:
i+=1
对于您要完成的任务,我肯定会尝试一些更具python风格的方法,将元素读入一个临时数组,并将该临时数组附加到多个数组中

arr=[1,2,3,0,4,5,6,0,7,8,9]
多重arr=[]
临时数组=[]
对于arr中的项目:
如果项==0:
多数组附加(临时数组)
临时数组=[]
其他:
临时数组追加(项)
多数组附加(临时数组)
打印(多页)

如果你真的想使用列表,你不需要列索引器。您只需将该值附加到正确的列表中即可


multi_arr = [[]]  # start with a nested list, since your vector doesnt start with a 0
endi = len(arr)
i = 0   #row

for h in range(endi):

   if arr[h] != 0:
       multi_arr[i].append(arr[h])
   else:
       i += 1
       multi_arr.insert(i,[])  # open new list
输出:

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

您正在声明一个一维数组,并像二维数组一样附加 一个解决方案二您的问题是:

arr=[1,2,3,4,5,6,7,8,9]
multi_arr=[]
end = len(arr)
a = []
counter =0
for i in arr :
    if counter < 3 :
        a.append(i)
        counter += 1
    else:
        multi_arr.append(a)
        a=[]
        counter = 0
        a.append(i)
        counter += 1   
multi_arr.append(a)
print(multi_arr)
arr=[1,2,3,4,5,6,7,8,9]
多重arr=[]
结束=长度(arr)
a=[]
计数器=0
对于arr中的i:
如果计数器<3:
a、 附加(i)
计数器+=1
其他:
多重数组附加(a)
a=[]
计数器=0
a、 附加(i)
计数器+=1
多重数组附加(a)
打印(多页)

以下是一种
收益率
方法:

def f(arr):
    res = []
    for x in arr:
        if x == 0:
            yield res
            res = []
        else:
            res.append(x)
    yield res

list(f(arr))

#> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

为您提供了一种不同的方法:超级简单且无循环

import numpy as np

arr = [1, 2, 3, 0, 4, 5, 6, 0, 7, 8, 9]
a = [i for i in arr if i]
x = arr[arr!=0] + 1

np.array(a).reshape([-1, x])
输出: 如果您需要列表,只需使用
np.array(a).重塑([x,y]).tolist()

一艘班轮: 将列表转换为numpy数组后
a=np.array(arr)


是否要从列表中删除0?必须使用列表还是可以使用numpy数组?看起来你想要一个数组,这里的数组是对称的还是矩形的?换句话说,所有行具有相同数量的元素。
from itertools import groupby;[列出k的(v),如果k,则在groupby(arr,lambda x:x>0)中列出v]
arr=arr[arr!=0]
后接
numpy
整形
arr=arr.restorate(-1,3)