我有一个空列表empty_list = []
和其他 2 个列表:list1=[[1,2,3],[4,5,6],[7,8,9]]
、list2=[[10,11,12],[13,14,15],[16,17,18]]
。
我想做两件事:
-
我想从列表中拿起
[1,2,3]
,[10,11,12]
来制作[1,2,3,10,11,12]
;[4,5,6]
和[13,14,15]
形成[4,5,6,13,14,15]
,最后[7,8,9],[17,18,19]
形成[7,8,9,17,18,19]
-
附加
listA=[1,2,3,10,11,12]
、listB=[4,5,6,13,14,15]
、listC=[7,8,9,17,18,19]
以axis=0
清空。
我已经通过非多进程但缓慢地完成了这项工作。我会问如何通过多进程做到这一点。 我有两种幼稚的方法,但不知道如何实现它。
-
要使用池,
制作一个
func0
,用于拾取子列表并使用pool.map(func0,[lst for lst in[ list1,list2,list3]]
合并它们制作一个
func1
,将listA, listB, listC
附加到空,然后pool.map(func1,[lst for lst in [listA,listB,listC]])
, -
使用
multiprocessing.Array
但我还没有弄清楚该怎么做
此示例可能不需要使用多处理,但我有数千行的列表。
我不确定这是否有帮助,但您可以避免一些列表推导:
empty_list=[]
for l1,l2 in zip(list1,list2):
empty_list.append(l1+l2)
让我们用一些随机列表来检查时间性能:
import timeit
code_to_test = """
import numpy as np
list1 = [np.random.randint(0,10, 100).tolist() for i in range(10_000)]
list2 = [np.random.randint(0,10, 100).tolist() for i in range(10_000)]
empty_list=[]
for l1,l2 in zip(list1,list2):
empty_list.append(l1+l2)
"""
elapsed_time = timeit.timeit(code_to_test, number=100)/100
print(elapsed_time, ' seconds')
0.12564824399999452 seconds
您可以使用dask
并行化numpy操作:
import dask.array as da
list1 = da.from_array(list1)
list2 = da.from_array(list2)
result = da.hstack([list1,list2])
result.compute()