我搜索了帖子,但无法找到解决我遇到的确切问题的方法。这很简单,但需要一点指导。
我有一个python列表,如下所示:
lst = ['bob/sally', 'bob/chris', 'bob/nate', 'sally/bob', ...]
我想迭代并打印唯一的对。所以在上面的例子中,它会发现bob / sally与sally / bob相同,所以它会删除一个。
任何帮助将不胜感激!我已经看过使用set()和其他python函数的帖子,但我认为在这种情况下不会起作用。
答案 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-Abrams和mgilson指出的那样,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'])])