python - 如何使用 pool.starmap 和 zip 组合并传递带有单个元素的整个列表

标签 python list zip pool

我想到了一个有趣的问题,希望有人能帮我解决这个问题! 我想使用多处理,所以我选择使用 pool.starmap(myfunction,zip([1,2,3,4,5],['a','b','c','d','e '])) 以传递多个参数。我想将整个列表 [1,2,3,4,5] 与第二个列表中的每个元素组合起来,例如

([1,2,3,4,5],'a'),([1,2,3,4,5],'b').....

而不是仅组合列表中的单个元素,例如

(1,'a'),(2,'b')

我知道如何以一种愚蠢的方式做到这一点,即将列表乘以 5

new_list=[1,2,3,4,5]*5

然后将 new_list 与第二个列表一起压缩

我现在想知道是否有更好的方法来做到这一点?

最佳答案

阅读您的评论后,我假设您正在寻找itertools.repeat:

import itertools
import multiprocessing

def combine(val, char):
    return f'{val}{char}'

vals = [1, 2, 3, 4, 5]
chars = ['a', 'b', 'c', 'd', 'e']

pool = multiprocessing.Pool(3)
combs = pool.starmap(combine, zip(itertools.repeat(vals, 5), chars))

print(combs)

这比简单的方法具有更小的内存占用,这只是

combs = pool.starmap(combine, zip([vals]*5, chars))

如果您想生成 valschars 元素的所有组合,您可以使用 itertools.product (这就是我首先假设你想要):

combs = pool.starmap(combine, itertools.product(vals, chars))

作为旁注; itertools 还包含一个 starmap 函数,其工作原理与 multiprocessing 函数大致相同,除了在一个进程中按顺序执行所有调用之外。然而,这无法利用多核的优势。

关于python - 如何使用 pool.starmap 和 zip 组合并传递带有单个元素的整个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49003897/

相关文章:

python - 从引用列表中过滤多个列表

c++ - 列表迭代器 Remove()

python - SQLAlchemy - 获取表的创建日期

python - 动态增长/流数据的哈希算法?

java - 将 string[] 转换为字符串,然后拆分为数组

c# - 解码base64加密字符串

java - 如何在 Java 中创建受密码保护的 zip 文件夹?

r - 使用 R 下载压缩数据文件、提取和导入数据

Python 决策树分类器 batch_prob_classify 函数

python - 过滤 BLAST 序列的数据帧以在每个集群中获得最大 pident_x