你應該知道的python列表去重方法,python列表重方法

來源:互聯網
上載者:User

你應該知道的python列表去重方法,python列表重方法

前言

列表去重是寫Python指令碼時常遇問題,因為不管來源資料來自哪裡,當我們轉換成列表的方式時,有可能預期的結果不是我們最終的結果,最常見的就是列表中元素有重複,這時候第一件事我們就要做去重處理。

我們先來個最簡單的方式,用python內建的資料類型set來實現。

假設我們的列表資料是這樣的:

level_names = [ u'Second Level', u'Second Level', u'Second Level', u'First Level', u'First Level']

因為集合的元素是不能重複的,所以將列錶轉換成集合時,會自動去掉重複的元素,這就是基本原理,代碼如下:

>>> the_list = set(level_names)>>> print(the_list)set([u'Second Level', u'First Level'])

這種方式缺點是再轉換成列表時無法儲存之前的列表順序,如果沒這個要求,這種方式是最簡答的, 也許有的小夥伴覺得好簡單呀,這沒什麼技術含量嗎,沒錯,所以一般面試題裡讓你列表去重一般會這麼寫:

請寫出列表去重的方法(不能用set)

人家寫明不能用set了,所以呢,這招有時候還不能用,那當然也難不倒我們,我們還有其他方法。

我們都知道列表可以遍曆,能遍曆問題也就簡單了,我們再定義空列表,然後遍曆有資料的列表,再遍曆時加一個判斷,如果在空列表裡沒有,就加進去,如果有了就丟掉,代碼如下:

the_list = []for level in level_names: if level not in the_list:  the_list.append(level)print(the_list)

大家覺得這種方式是不是還可以,但這種方式對付一般的小列表是沒問題的,但如果遇到一個超級大列表,也會力不從心,因為在the_list列表變的非常大,在判斷時候會影響效率,因為列表是按索引順序去尋找的,當資料量很大時會變慢。

也許你要問了,那我遇到大的列表咋辦? 有更牛掰點的方法嗎?當然有,讓我們繼續,既然在判斷時用列表會影響效率,那我們就轉換一個思路,我們用集合,那你可能要問了,那集合就快了?沒錯,因為set使用的hash函數尋找值,雖然set無序,但位置是固定的,只需一次就可以查到特定元素是否存在,網上有人做了列表和set的元素尋找對比,相同的資料條件下,用list耗時16分鐘,用set耗時是52秒,這一對比看出效果了吧,別的不多說了,貼代碼:

the_list = []the_set = set()for level in level_names: if level not in the_set:  the_set.add(level)  the_list.append(level)print(the_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.