Python 去除序列s中的重複元素

來源:互聯網
上載者:User

1.在可hash的情況下使用set,時間複雜度為 O(n)

return list(set(s))

2.不可hash,但支援比較使用sort,時間複雜度為 O(nlogn)

t=list(s)try:    t.sort()except TypeError:    del telse:    return [x for i,x in enumerate(t) if not i or t[i]!=t[i-1]]

3.前兩者都不能的情況下利用in判斷,時間複雜度為 O(n**2)

u=[]for x in s:    if x not in u:         u.append(x)return u

關於是否hashable的一些注意事項:

    • 如果一個對象擁有在其生命週期內不變的hash值(即有hash()方法),則其hashable,可變對象如list不可hash

    • 可雜湊對象擁有__eq__()和__cmp__()方法,相等的兩個對象hash值也相等

    • 字典的key和set中的元素必須是可hash的,因為資料結構內部使用其hash值

    • 如果一個class沒有定義cmp和eq方法的話,他是不能定義hash操作的;如果定義了前兩個而未定義hash方法亦不能在需要hash的序列中使用其執行個體

    • 一個可變的class是不能定義hash方法的,哪怕其定義了cmp和eq方法

    • 使用者自訂的class預設具有__cmp__()和__eq__()方法,其對象只有在跟自己比較時才相等,x.__hash__()返回id(x)

    • 不可hash的class可顯示定義 __hash__=None

    相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.