簡體   English   中英

在python列表中統一所有對

[英]Uniquify all pairs in a python list

我已經搜索了帖子,但找不到我遇到的確切問題的解決方案。 這很簡單,但需要一些指導。

我有一個看起來像的python列表:

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

我想遍歷並僅打印唯一的對。 因此,在上面的示例中,它將發現bob / sally與sally / bob相同,因此將其刪除。

任何幫助將不勝感激! 我已經看到過使用set()和其他python函數的發布,但我認為在這種情況下不可行。

您可以使用一組,並通過對名稱進行排序來規范名稱的順序:

>>> 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的使用更為優雅,並且frozenset了sorting和tuple()步驟:

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

我已經看到過使用set()和其他python函數的發布,但我認為在這種情況下不可行。

對我來說很好

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM