Python: 序列list

來源:互聯網
上載者:User

標籤:c99   yield   def   簡單   需要   col   長度   意思   函數   

問題:怎樣在一個序列上面保持元素順序的同時消除重複的值?
answer:如果序列上的值都是hashable 類型,那麼可以很簡單的利用集合或者產生器來解決這個問題。
  eg1:  

    def dedupe(items):
      seen = set()
      for item in items:
        if item not in seen:
          yield item
          seen.add(item)
    下面是使用上述函數的例子:
    >>> a = [1, 5, 2, 1, 9, 1, 5, 10]
    >>> list(dedupe(a))
    [1, 5, 2, 9, 10]


  eg2:
    這個方法僅僅在序列中元素為hashable 的時候才管用。

    如果你想消除元素不可哈希(比如dict 類型) 的序列中重複元素的話,你需要將上述代碼稍微改變一下,就像這樣:
    def dedupe(items, key=None):
      seen = set()
      for item in items:
        val = item if key is None else key(item)
        if val not in seen:
        yield item
        seen.add(val)
    這裡的key 參數指定了一個函數,將序列元素轉換成hashable 類型。下面是它的
    用法樣本:
    >>> a = [ {‘x‘:1, ‘y‘:2}, {‘x‘:1, ‘y‘:3}, {‘x‘:1, ‘y‘:2}, {‘x‘:2, ‘y‘:4}]
    >>> list(dedupe(a, key=lambda d: (d[‘x‘],d[‘y‘])))
    [{‘x‘: 1, ‘y‘: 2}, {‘x‘: 1, ‘y‘: 3}, {‘x‘: 2, ‘y‘: 4}]
    >>> list(dedupe(a, key=lambda d: d[‘x‘]))
    [{‘x‘: 1, ‘y‘: 2}, {‘x‘: 2, ‘y‘: 4}]

    如果你想基於單個欄位、屬性或者某個更大的資料結構來消除重複元素,第二種方案同樣可以勝任。

附:

  hash是什麼意思?

  Hash,一般翻譯成‘散列’,也有直譯成‘雜湊’的,把任意長度的輸入通過散列演算法,變成固定長度的輸出。該輸出就是散列值。

  這種轉換是一種壓縮映射,散列值的空間通常遠小於輸入的空間,不同的輸入可能會散列成相同的輸出,而不可能從散列值來唯一的確定輸入值。

  簡單的說是將一種任意長度的訊息壓縮到某一固定長度的訊息摘要的函數。

  HASH主要用於資訊安全領域中密碼編譯演算法,他把一些不同長度的資訊轉化成雜亂的128位編碼裡,叫做HASH值。

  也就是說hash就是找到一種資料內容和資料存放地址之間的映射關係

  著名的hash演算法,MD5和SHA1是目前應用最廣泛的Hash演算法,他們都是以MD4為基礎設計的

Python: 序列list

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.