Python 如何迭代字典中的每对项
我正在做一个重力模拟器,我需要计算作用在每个物体上的合力 为了做到这一点,我需要遍历字典Python 如何迭代字典中的每对项,python,arrays,dictionary,Python,Arrays,Dictionary,我正在做一个重力模拟器,我需要计算作用在每个物体上的合力 为了做到这一点,我需要遍历字典(id:instance of Body class)中的每一对物体,并获得这两个物体之间的引力。然后,我把所有的力加起来,得到结果 但是,如何在Python中仅对字典中的每对项迭代一次?如果天体被列在一个列表中,那就很简单: for i in range(len(bodies)): for j in range(len(bodies) - i - 1): k = j - i + 1
(id:instance of Body class)
中的每一对物体,并获得这两个物体之间的引力。然后,我把所有的力加起来,得到结果
但是,如何在Python中仅对字典中的每对项迭代一次?如果天体被列在一个列表中,那就很简单:
for i in range(len(bodies)):
for j in range(len(bodies) - i - 1):
k = j - i + 1
b1 = bodies[i]
b2 = bodies[k]
您正在查找
itertools.compositions()
:
例如:
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')]
和itertools
”非常适合此用例
from itertools import combinations
for a, b in combinations(bodies.values(), 2):
print a, b
该模块提供了一种优秀的组合方法,您可以使用:
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
注意:如果您想要支持大量实体;您可以使用而不是
O(n*n)
。请参阅“编程珍珠”一书中的讨论。