可能重复:
如何在Python中将列表转换为数组?
我如何将一个列表转换成数组,例如:
data_list = [0,1,2,3,4,5,6,7,8]
转换成一个列表的列表,如:
new_list = [ [0,1,2] , [3,4,5] , [6,7,8] ]
我想对有序列表中的元素进行分组,并将它们保留在一个有序列表中。我该如何实现?
可能重复:
如何在Python中将列表转换为数组?
我如何将一个列表转换成数组,例如:
data_list = [0,1,2,3,4,5,6,7,8]
转换成一个列表的列表,如:
new_list = [ [0,1,2] , [3,4,5] , [6,7,8] ]
我想对有序列表中的元素进行分组,并将它们保留在一个有序列表中。我该如何实现?
这将按照它们出现的顺序将每3个元素分组:
new_list = [data_list[i:i+3] for i in range(0, len(data_list), 3)]
如果这不是你想要的,请给我们一个更好的示例。
这假设 data_list 的长度是三的倍数。
i=0
new_list=[]
while i<len(data_list):
new_list.append(data_list[i:i+3])
i+=3
类似这样:
map (lambda x: data_list[3*x:(x+1)*3], range (3))
new_list = [data_list[x:x+3] for x in range(0, len(data_list) - 2, 3)]
使用列表推导式赢得胜利 :)
def gen_list_of_lists(original_list, new_structure):
assert len(original_list) == sum(new_structure), \
"The number of elements in the original list and desired structure don't match"
list_of_lists = [[original_list[i + sum(new_structure[:j])] for i in range(new_structure[j])] \
for j in range(len(new_structure))]
return list_of_lists
data_list = [0,1,2,3,4,5,6,7,8]
new_list = gen_list_of_lists(original_list=data_list, new_structure=[3,3,3])
# The original desired outcome of [[0,1,2], [3,4,5], [6,7,8]]
new_list = gen_list_of_lists(original_list=data_list, new_structure=[2,3,3,1])
# [[0, 1], [2, 3, 4], [5, 6, 7], [8]]
这里是一个通用解决方案
import math
data_list = [0,1,2,3,4,5,6,7,8]
batch_size=3
n_batches=math.ceil(len(data_list)/batch_size)
[data_list[x*batch_size:min(x*batch_size+batch_size,len(data_list))]
for x in range(n_batches)]
即使最后一个子列表的大小与其它子列表不相同(小于批处理大小<batch_size),代码仍然可以正常运行。
下面这个更加优化,而且非常直接。
data_list = [0,1,2,3,4,5,6,7,8]
result =[]
i=0
while i <(len(data_list)-2):
result.append(data_list[i:i+3])
i+=3
print(result)
**output**
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
你有任何从原始列表中进行筛选的标准吗?
Python确实允许您这样做:
new_list = []
new_list.append(data_list[:3])
new_list.append(data_list[3:6])
new_list.append(data_list[6:])
print new_list
# Output: [ [0,1,2] , [3,4,5] , [6,7,8] ]
numpy
。但或许足够接近了。谢谢。 - eatlist
和numpy.array
的解决方案完全不同。 - pillmunchernumpy
数组,并且您已经发现将其视图重塑为形状(17520,3)将使您能够以直接的方式执行一些(形状保持)计算。现在,反向重塑将非常自然。无论如何,正如我建议的那样,请提出一个新问题,并提供详细描述(您的问题)。这些评论可能是这些描述的良好起点,但仅仅是一个起点。谢谢。 - eat