1

投稿を検索しましたが、直面している問題の正確な解決策が見つかりません。とても簡単ですが、少しガイドが必要です。

次のようなpythonリストがあります。

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

反復して、一意のペアのみを印刷したいと思います。したがって、上記の例では、bob/sally が sally/bob と同じであることがわかり、1 つが削除されます。

どんな助けでも大歓迎です!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によって指摘されているように、 a の使用frozensetははるかにエレガントで、並べ替えと 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 に答える