私は面白い質問について考えました、そして誰かが私がこれを解決するのを手伝ってくれることを願っています!マルチプロセッシングを使用したいので、pool.starmap(myfunction、zip([1,2,3,4,5]、['a'、 'b'、 'c'、 'd'、 'e ']))複数の引数を渡すため。リスト全体[1,2,3,4,5]を、次のような2番目のリストのすべての要素と組み合わせたい
([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を2番目のリストで圧縮します
私は今、これを行うためのより良い方法があるかどうか疑問に思っていますか?
あなたのコメントを読んだ後、私はあなたが探していると思います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))
代わりに、vals
とchars
要素のすべての組み合わせを生成したい場合は、次を使用できますitertools.product
(これは私が最初に望んでいたものです):
combs = pool.starmap(combine, itertools.product(vals, chars))
補足として; itertools
また、1つのプロセスですべての呼び出しを順番に実行することを除いてstarmap
、ほぼ同じように機能する関数も含まれていますmultiprocessing
。ただし、これは複数のコアを利用することはできません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加