日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python列表去重效率,你应该知道的python列表去重方法

發(fā)布時間:2023/12/1 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python列表去重效率,你应该知道的python列表去重方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

列表去重是寫Python腳本時常遇問題,因為不管源數(shù)據(jù)來自哪里,當我們轉(zhuǎn)換成列表的方式時,有可能預期的結(jié)果不是我們最終的結(jié)果,最常見的就是列表中元素有重復,這時候第一件事我們就要做去重處理。

我們先來個最簡單的方式,用python內(nèi)置的數(shù)據(jù)類型set來實現(xiàn)。

假設我們的列表數(shù)據(jù)是這樣的:

level_names = [

u'Second Level',

u'Second Level',

u'Second Level',

u'First Level',

u'First Level'

]

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

>>> the_list = set(level_names)

>>> print(the_list)

set([u'Second Level', u'First Level'])

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

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

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

我們都知道列表可以遍歷,能遍歷問題也就簡單了,我們再定義空列表,然后遍歷有數(shù)據(jù)的列表,再遍歷時加一個判斷,如果在空列表里沒有,就加進去,如果有了就丟掉,代碼如下:

the_list = []

for level in level_names:

if level not in the_list:

the_list.append(level)

print(the_list)

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

也許你要問了,那我遇到大的列表咋辦? 有更牛掰點的方法嗎?當然有,讓我們繼續(xù),既然在判斷時用列表會影響效率,那我們就轉(zhuǎn)換一個思路,我們用集合,那你可能要問了,那集合就快了?沒錯,因為set使用的hash函數(shù)查找值,雖然set無序,但位置是固定的,只需一次就可以查到特定元素是否存在,網(wǎng)上有人做了列表和set的元素查找對比,相同的數(shù)據(jù)條件下,用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)

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

總結(jié)

以上是生活随笔為你收集整理的python列表去重效率,你应该知道的python列表去重方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。