删除python集中的重复交互对

Rak*_* S. 4 python tuples set

假设你有一个python集中的元组列表:

>>> pairs = set( [(0,1),(0,1),(1,0)] )
>>> print pairs
set([(0, 1), (1, 0)])
Run Code Online (Sandbox Code Playgroud)

显然,前两个元素是重复的,并且根据集合的定义,"对"仅包含唯一元素.

但是,在我的特定情况下,元组(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])
Run Code Online (Sandbox Code Playgroud)

我很感激任何提示.

编辑:

有人询问了背景.这应该用于粒子模拟.由于对称条件,作用于j的粒子i的力与作用于i的j的力相同.因此,计算时间减少了50%.

NPE*_*NPE 9

怎么样:

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)])
Run Code Online (Sandbox Code Playgroud)

  • @RakulanS:设计更难的问题:) (6认同)
  • 人们总能找到单线解决方案怎么可能? (3认同)