1

我已经通过帖子进行了搜索,但找不到针对我所面临的确切问题的解决方案。这很容易,但需要一些指导。

我有一个看起来像的python列表:

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

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

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

4

2 回答 2

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所指出的那样,使用 afrozenset更加优雅,并且避开了排序和 tuple() 步骤:

set(frozenset(item.split('/')) for item in data)
于 2012-10-16T15:07:43.953 回答
2

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

对我来说工作得很好...

>>> set([frozenset((x, y)) for (x, y) in [('bob', 'sally'), ('bob', 'nate'), ('sally', 'bob')]])
set([frozenset(['bob', 'sally']), frozenset(['bob', 'nate'])])
于 2012-10-16T15:07:52.967 回答