Python 创建普通数组的多维数组
Python create multi dimensional array of of normal array
我想用普通数组创建一个多维数组。当我的起始数组中有 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]]
到目前为止,我的代码如下所示:
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 array
。您可以使用打印语句或调试器来验证这一点——像这样:
for h in range(end):
if arr[h] != 0:
print(multi_arr)
j += 1
multi_arr[i][j]= arr[h]
elif arr[i] != 0:
i += 1
我肯定会为你想要完成的事情尝试更多 pythonic,将元素读入临时数组并将该临时数组附加到多数组。
arr = [1, 2, 3, 0, 4, 5, 6, 0, 7, 8, 9]
multi_arr = []
temp_array = []
for item in arr:
if item == 0:
multi_arr.append(temp_array)
temp_array = []
else:
temp_array.append(item)
multi_arr.append(temp_array)
print(multi_arr)
如果您真的想使用列表,则不需要列索引器。您只需将该值附加到正确的列表即可。
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)
这是一个yield
方法:
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])
输出:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
如果您需要列表,只需使用 np.array(a).reshape([x, y]).tolist()
。
One-liner:
将列表转换为 numpy 数组后 a = np.array(arr)
:
a[a!=0].reshape([-1, len(a) - np.count_nonzero(a)+1])
我想用普通数组创建一个多维数组。当我的起始数组中有 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]]
到目前为止,我的代码如下所示:
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 array
。您可以使用打印语句或调试器来验证这一点——像这样:
for h in range(end):
if arr[h] != 0:
print(multi_arr)
j += 1
multi_arr[i][j]= arr[h]
elif arr[i] != 0:
i += 1
我肯定会为你想要完成的事情尝试更多 pythonic,将元素读入临时数组并将该临时数组附加到多数组。
arr = [1, 2, 3, 0, 4, 5, 6, 0, 7, 8, 9]
multi_arr = []
temp_array = []
for item in arr:
if item == 0:
multi_arr.append(temp_array)
temp_array = []
else:
temp_array.append(item)
multi_arr.append(temp_array)
print(multi_arr)
如果您真的想使用列表,则不需要列索引器。您只需将该值附加到正确的列表即可。
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)
这是一个yield
方法:
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])
输出:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
如果您需要列表,只需使用 np.array(a).reshape([x, y]).tolist()
。
One-liner:
将列表转换为 numpy 数组后 a = np.array(arr)
:
a[a!=0].reshape([-1, len(a) - np.count_nonzero(a)+1])