Uniquify python列表中的所有对

时间:2012-10-16 15:03:40

标签: python list unique

我搜索了帖子,但无法找到解决我遇到的确切问题的方法。这很简单,但需要一点指导。

我有一个python列表,如下所示:

lst = ['bob/sally', 'bob/chris', 'bob/nate', 'sally/bob', ...]

我想迭代并打印唯一的对。所以在上面的例子中,它会发现bob / sally与sally / bob相同,所以它会删除一个。

任何帮助将不胜感激!我已经看过使用set()和其他python函数的帖子,但我认为在这种情况下不会起作用。

2 个答案:

答案 0 :(得分:3)

你可以使用一个集合,并通过对它们进行排序来规范化名称的顺序:

>>> data = ['bob/sally', 'bob/chris', 'bob/nate', 'sally/bob']
>>> set(tuple(sorted(item.split('/'))) for item in data)
set([('bob', 'chris'), ('bob', 'nate'), ('bob', 'sally')])

或者正如Ignacio Vazquez-Abramsmgilson指出的那样,frozenset的使用更加优雅,并且排除了排序和元组()步骤:

set(frozenset(item.split('/')) for item in data)

答案 1 :(得分:2)

  

我已经看过使用set()和其他python函数的帖子,但我认为在这种情况下不会起作用。

对我来说很好......

>>> set([frozenset((x, y)) for (x, y) in [('bob', 'sally'), ('bob', 'nate'), ('sally', 'bob')]])
set([frozenset(['bob', 'sally']), frozenset(['bob', 'nate'])])