【发布时间】:2012-03-19 03:16:40
【问题描述】:
假设你有一个 python 集中的元组列表:
>>> pairs = set( [(0,1),(0,1),(1,0)] )
>>> print pairs
set([(0, 1), (1, 0)])
显然,前两个元素是重复的,并且根据 对于集合的定义,“pairs”只包含唯一元素。
但是,在我的特殊情况下,元组 (i,j) 定义了一个交互对。因此, (i,j) 和 (j,i) 相同。我需要一种有效的方法来减少所有重复 元素。计算时间对我来说至关重要,因为整个集合很容易包含许多 10**6 的元素。我希望得到以下结果:
>>> pairs = set( [(0,1),(0,1),(1,0)] )
>>> pairs = remove_duplicate_interactions(pairs)
>>> print pairs
set([0,1]) or set([1,0])
感谢任何提示。
编辑:
有人询问上下文。这应该用于粒子模拟。 由于对称条件,粒子 i 作用于 j 的力与 j 作用于 i 的力相同。因此计算时间减少了 50 %。
【问题讨论】:
-
没有任何维度的排序。集合([(i,j),(k,l),..]) = 集合([ (k,l),(i,j),..]) = 集合([(j,i),( l,k),...]) ...