最方便的,「Python化」的方式來從列表中刪除重複項基本上是:使用自定義比較刪除重複
mylist = list(set(mylist))
但是,假如你的標準計算重複取決於所包含對象的特定成員場在mylist
。
那麼,一個解決方案是隻爲mylist
中的對象定義__eq__
和__hash__
,然後經典的list(set(mylist))
將工作。
但是有時你需要更多的靈活性。能夠創建即時lambda表達式以使用自定義比較例程以不同方式識別重複對象會非常方便。理想的情況下,是這樣的:
mylist = list(set(mylist, key = lambda x: x.firstname))
當然,這並不實際工作,因爲set
構造不採取比較功能,並set
需要可哈希鍵以及。
那麼最接近實現類似目的的方法是什麼,以便您可以使用任意比較函數刪除重複項?
這是最簡單的方法。性能應該與您的設置方法幾乎相同。 – Chronial
哇我以前從來沒有見過'{x.firstname:x for m in mylist}'的語法。它叫什麼,我在哪裏可以在文檔中找到它。 –
@MarwanAlsabbagh:這是[dict理解](http://www.python.org/dev/peps/pep-0274/)。它是在Python 2.7和3.0中添加的。這相當於'dict((x.firstname,x)for mylist')''。 – interjay