首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除python集中的重复交互对

删除python集中的重复交互对
EN

Stack Overflow用户
提问于 2012-03-01 00:03:04
回答 5查看 11.1K关注 0票数 6

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

代码语言:javascript
运行
复制
>>> pairs = set( [(0,1),(0,1),(1,0)] )
>>> print pairs
set([(0, 1), (1, 0)])

显然,前两个元素是重复的,根据集合的定义,“配对”只包含唯一的元素。

然而,在我的特殊情况下,元组(i,j)定义了一个交互对。因此,(i,j)和(j,i)是相同的。我需要一种有效的方法来减少所有重复的元素。计算时间对我来说至关重要,因为整个集合很容易包含多达10**6的元素。我希望得到以下结果:

代码语言:javascript
运行
复制
>>> 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 %。

EN

回答 5

Stack Overflow用户

发布于 2012-03-01 00:05:40

这样如何:

代码语言:javascript
运行
复制
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)])
票数 10
EN

Stack Overflow用户

发布于 2012-03-01 00:06:56

代码语言:javascript
运行
复制
>>> pairs = [(0,1),(0,1),(1,0)]
>>> set(tuple(sorted(p)) for p in pairs)
set([(0, 1)])
票数 4
EN

Stack Overflow用户

发布于 2012-03-01 00:07:10

我会输入tuple子类型,并始终对其进行排序:

代码语言:javascript
运行
复制
class InteractionPair(tuple):
    def __new__(cls, a, b):
        if a <= b:
            return tuple.__new__(cls, (a, b))
        return tuple.__new__(cls, (b, a))

示例:

代码语言:javascript
运行
复制
>>> set([InteractionPair(0, 1), InteractionPair(1, 0)])
set([(0, 1)])

这也可以应用于标准元组的列表:

代码语言:javascript
运行
复制
from itertools import starmap
pairs = [(0, 1), (0, 1), (1, 0)]
print set(starmap(InteractionPair, pairs))

编辑:她是一些计时,使用1000000个随机对的列表:

代码语言:javascript
运行
复制
In [14]: timeit set(starmap(InteractionPair, pairs))
1 loops, best of 3: 742 ms per loop

In [15]: timeit set((a,b) if a<=b else (b,a) for a,b in pairs)
1 loops, best of 3: 258 ms per loop

In [16]: timeit set(tuple(sorted(p)) for p in pairs)
1 loops, best of 3: 1.02 s per loop

就性能而言,solution by aix胜出。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9502469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档