最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

你應(yīng)該知道的python列表去重方法

 更新時(shí)間:2017年01月17日 08:45:05   作者:mindg.cn  
初學(xué)者經(jīng)常會遇到如何移除list中重復(fù)元素的問題。 這個(gè)問題在其他語言中可能需要for循環(huán)什么的,而在python中不用這樣,非常簡單,下面來通過這篇文章主要介紹了關(guān)于python列表去重方法以及拓展,需要的朋友可以參考借鑒,一起來看看吧。

前言

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

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

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

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

因?yàn)榧系脑厥遣荒苤貜?fù)的,所以將列表轉(zhuǎn)換成集合時(shí),會自動(dòng)去掉重復(fù)的元素,這就是基本原理,代碼如下:

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

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

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

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

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

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

大家覺得這種方式是不是還可以,但這種方式對付一般的小列表是沒問題的,但如果遇到一個(gè)超級大列表,也會力不從心,因?yàn)樵趖he_list列表變的非常大,在判斷時(shí)候會影響效率,因?yàn)榱斜硎前此饕樞蛉ゲ檎业?,?dāng)數(shù)據(jù)量很大時(shí)會變慢。

也許你要問了,那我遇到大的列表咋辦? 有更牛掰點(diǎn)的方法嗎?當(dāng)然有,讓我們繼續(xù),既然在判斷時(shí)用列表會影響效率,那我們就轉(zhuǎn)換一個(gè)思路,我們用集合,那你可能要問了,那集合就快了?沒錯(cuò),因?yàn)閟et使用的hash函數(shù)查找值,雖然set無序,但位置是固定的,只需一次就可以查到特定元素是否存在,網(wǎng)上有人做了列表和set的元素查找對比,相同的數(shù)據(jù)條件下,用list耗時(shí)16分鐘,用set耗時(shí)是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)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

相關(guān)文章

最新評論

汝阳县| 庐江县| 新乡市| 苏尼特左旗| 泗水县| 甘泉县| 达日县| 民县| 大厂| 军事| 弥渡县| 桐城市| 柳江县| 雷州市| 徐水县| 黄梅县| 高碑店市| 海林市| 大埔区| 广昌县| 石台县| 阿克陶县| 宁陕县| 合阳县| 繁峙县| 建始县| 五台县| 大丰市| 民和| 托克托县| 常熟市| 平阳县| 蒙阴县| 茂名市| 巨鹿县| 嘉善县| 昔阳县| 芮城县| 依安县| 西乡县| 昭通市|