Python创建普通数组的多维数组
我想用普通数组创建一个多维数组。当我的起始数组中有0时,我想将行号改为1 我的开始数组如下所示: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],
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)
?