我有一个循环,每次运行时都会生成一个 value_list,在每次迭代结束时我想将所有列表附加到一个多维数组中
我有:
value_list = [1,2,3,4]
在第一次迭代中value_list = [5,6,7,8]
第二次迭代value list = [9,10,11,12]
第三次迭代 在每次迭代结束时,我想要一个多维数组,如
value_list_copy = [[1,2,3,4]]
在第一次迭代中 value_list_copy = [[1,2,3,4],[5,6,7,8]]
在第二次迭代中 value_list_copy = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
我怎样才能实现这个目标?
谢谢
您可以使用嵌套理解和
itertools.count
:
from itertools import count, islice
cols = 4
rows = 5
c = count(1)
matrix = [[next(c) for _ in range(cols)] for _ in range(rows)]
# [[1, 2, 3, 4],
# [5, 6, 7, 8],
# [9, 10, 11, 12],
# [13, 14, 15, 16],
# [17, 18, 19, 20]]
酷孩子可能还想要
zip
计数迭代器本身:
list(islice(zip(*[c]*cols), rows))
# [(1, 2, 3, 4),
# (5, 6, 7, 8),
# (9, 10, 11, 12),
# (13, 14, 15, 16),
# (17, 18, 19, 20)]
Walrus assignment
(:=
)。
Syntax and semantic
。
count=0
rows=5
cols=4
[[(count:=count+1) for _ in range(cols)] for _ in range(rows)]
输出:
[[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16],
[17, 18, 19, 20]]
不使用
:=
。
rows=5
cols=4
[list(range(i,i+cols)) for i in range(1,rows*cols,cols)]
试试这个:
limit = 10
length_of_elements_in_each_list = 4
[range(i, i+length_of_elements_in_each_list) for i in range(1, limit)]
您可以根据需要设置限制和length_of_elements_in_each_list。
试试下面这个:
value_list_copy = []
for i in range(n): # ----------> Assuming n is the number of times your loop is running
value_list_copy.append(value_list) # ------ Append your value list in value_list_copy in every iteration
在这里你会得到一个数组的数组。
print(value_list_copy)
这里还有另外两种可能的解决方案:
双for循环方法
rows, cols, start = 3, 4, 1
value_list_copy = []
for j in range(rows):
value_list = []
for i in range(start, cols + start):
value_list.append((j*cols)+i)
value_list_copy.append(value_list)
print(
f'value_list = {value_list}\n'
f'value_list_copy = {value_list_copy}\n'
)
列出补偿方法
rows, cols, start = 3, 4, 1
value_list_copy_2 = [
[
(j*cols)+i for i in range(start, cols + start)
] for j in range(rows)
]
print(f'value_list_copy_2 = {value_list_copy_2}')
(lambda x,y: np.arange(1,1+x*y).reshape((x,y)).tolist())(3,4)