3

私は重力シミュレーターを作成しており、各ボディに作用する合力を計算する必要があります。

これを行うには、ディクショナリ内のボディのすべてのペアを反復処理し、(id: instance of Body class)それら 2 つのボディ間の重力を取得する必要があります。次に、すべての力を合計して合力を求めます。

しかし、Python でディクショナリ内の項目の各ペアを 1 回だけ反復処理するにはどうすればよいでしょうか? 天体がリストに保持されている場合、それは簡単です:

for i in range(len(bodies)):
    for j in range(len(bodies) - i - 1):
        k = j - i + 1
        b1 = bodies[i]
        b2 = bodies[k]
4

3 に答える 3

2

values()およびitertools'combinationsは、このユース ケースに最適です。

from itertools import combinations
for a, b in combinations(bodies.values(), 2):
    print a, b
于 2012-10-27T19:41:59.807 に答える
1

あなたが探しているitertools.combinations()

例:

In [76]: lis=['a','b','c','d']  #consider these as your dictionary items

In [77]: [x for x in combinations(lis,2)]
Out[77]: [('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]
于 2012-10-27T19:40:33.983 に答える
1

このitertoolsモジュールは、使用できる優れたcombinations方法を提供します。

from itertools import combinations

bodies = {}
# add bodies

for a,b in combinations(bodies.values(), 2):
    # a and b are a pair of bodies. do stuff
    pass

ちなみに、これはリストを使用しても機能します。

from itertools import combinations

bodies = []
# add bodies

for a,b in combinations(bodies, 2):
    pass
于 2012-10-27T19:42:46.150 に答える