1

すべての次元に適用される n 次元ベクトル (リストとして指定) をオフセットのリストと組み合わせる慣用的な方法を探しています。つまり: 次の値とオフセットがあるとします。

v = [5, 6]
o = [-1, 2, 3]

次のリストを取得したい:

n = [[4, 5], [7, 5], [8, 5], [4, 8], [7, 8], [8, 8], [4, 9], [7, 9], [8, 9]]

由来:

n = [[5-1, 6-1], [5+2, 6-1], [5+3, 6-1], [5-1, 6+2], [5+2, 6+2], [5+3, 6+2], [5-1, 6+3], [5+2, 6+3], [5+3, 6+3]]

ここではパフォーマンスは問題ではなく、結果のリストの順序も重要ではありません。醜いネストされた for ループなしでこれを生成する方法について何か提案はありますか? itertools はソリューションのためのツールを提供していると思いますが、まだ理解していません。

4

4 に答える 4

2

itertools.product() gives you the desired combinations of o. Use that with a list comprehension to create n:

from itertools import product

n = [[v[0] + x, v[1] + y] for x, y in product(o, repeat=2)]

Demo:

>>> [[v[0] + x, v[1] + y] for x, y in product(o, repeat=2)]
[[4, 5], [4, 8], [4, 9], [7, 5], [7, 8], [7, 9], [8, 5], [8, 8], [8, 9]]
于 2013-07-29T08:05:48.880 に答える
2

Use itertools.product:

>>> import itertools
>>> 
>>> v = [5, 6]
>>> o = [-1, 2, 3]
>>> 
>>> x, y = v
>>> [[x+dx, y+dy] for dx, dy in itertools.product(o, repeat=2)]
[[4, 5], [4, 8], [4, 9], [7, 5], [7, 8], [7, 9], [8, 5], [8, 8], [8, 9]]

originating from:

[[5-1, 6-1], [5-1, 6+2], [5-1, 6+3], [5+2, 6-1], [5+2, 6+2], [5+2, 6+3], [5+3, 6-1], [5+3, 6+2], [5+3, 6+3]]
于 2013-07-29T08:05:56.537 に答える
1

You may use itertools module to get all permutations.

于 2013-07-29T08:05:40.650 に答える