假设您有一个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])我非常感谢您的任何提示。
编辑:
有人问到了背景。这应该用于粒子模拟。由于对称条件,粒子i作用在j上的力与j作用在i上的力相同,因此计算时间减少了50 %。
发布于 2012-03-01 00:33:22
如果您可以使用frozenset而不是元组,则可以将每个交互对存储为一个集合。另一种选择是以某种规范的形式存储所有的元组(例如,这样i < j)。不知道这是否比frozenset有速度优势,但是表单越简单,python就能更快地散列它并计算唯一元素集。
https://stackoverflow.com/questions/9502469
复制相似问题