删除python集中的重复交互对

假设你有一个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)])
上一篇:python – 将列表转换为2元组列表


下一篇:C# – 如何从List中删除值