假设你有一个python集中的元组列表:
>>> pairs = set( [(0,1),(0,1),(1,0)] )
>>> print pairs
set([(0, 1), (1, 0)])
显然,前两个元素是重复的和相应的
对于集合的定义,“对”仅包含唯一元素.
但是,在我的特定情况下,元组(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])
我很感激任何提示.
编辑:
有人询问了背景.这应该用于粒子模拟.
由于对称条件,作用于j的粒子i的力与作用于i的j的力相同.因此,计算时间减少了50%.
解决方法:
怎么样:
In [4]: pairs = set( [(0,1),(0,1),(1,0),(1,2),(1,0),(2,1)] )
In [5]: set((a,b) if a<=b else (b,a) for a,b in pairs)
Out[5]: set([(0, 1), (1, 2)])