如何从Python中的多处理中返回扁平的列表



我有以下代码。

我的工人返回列表,我想要一个列表中的主列表。

from multiprocessing import Pool, Manager
manager = Manager()
another_shared_list = manager.list()
def worker2(number):
    return [x for x in xrange(number)]
numbers = [5,7,2,4]
pool1 = Pool(4)
another_shared_list.extend(pool1.map(worker2, numbers))
print another_shared_list

它打印

[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4, 5, 6], [0, 1], [0, 1, 2, 3]]

您可能已经猜到了我希望另一个_shared_list为

[0,1,2,3,4,0,1,2,3,4,5,6,0,1,0,1,2,3]

我应该如何处理?

编辑:我知道这似乎是一个列表问题,而不是多处理。但是我的偏爱是避免迭代。我想要一些这样的东西,以至于另一个_shared_list直接从call pool1.map或其他东西获得了扁平的列表!

使用 itertools.chain

itertools.chain(*another_shared_list)

工作示例:

another_shared_list = [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4, 5, 6], [0, 1], [0, 1, 2, 3]]
import itertools
list(itertools.chain(*another_shared_list))
[0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 5, 6, 0, 1, 0, 1, 2, 3]

请注意,chain返回迭代器,如果需要的话,您必须将其食用到列表中。

或如下注释:

itertools.chain.from_iterable(another_shared_list) #to avoid unpacking

相关内容

  • 没有找到相关文章

最新更新