成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python 列表去重的4種方式及性能對比

開發 后端
列表去重是Python中一種常見的處理方式,任何編程場景都可能會遇到需要列表去重的情況。列表去重的方式有很多,本文將一一講解他們,并進行性能的對比。

列表去重是Python中一種常見的處理方式,任何編程場景都可能會遇到需要列表去重的情況。

列表去重的方式有很多,本文將一一講解他們,并進行性能的對比。

[[350938]]

讓我們先制造一些簡單的數據,生成0到99的100萬個隨機數:

  1. from random import randrange 
  2. DUPLICATES = [randrange(100) for _ in range(1000000)] 

接下來嘗試這4種去重方式中最簡單直觀的方法:

1. 新建一個數組,遍歷原數組,如果值不在新數組里便加入到新數組中。

  1. # 第一種方式 
  2. def easy_way(): 
  3.     unique = [] 
  4.     for element in DUPLICATES: 
  5.         if element not in unique: 
  6.             unique.append(element) 
  7.     return unique 

進入ipython使用timeit計算其去重耗時:

  1. %timeit easy_way() 
  2. # 1.16 s ± 137 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) 

平均耗時在1.16秒左右,但是在這個例子中我們使用了數組作為存儲對象,實際上如果我們改成集合存儲去重后的結果,性能會快不少:

  1. def easy_way(): 
  2.     unique = set() 
  3.     for element in DUPLICATES: 
  4.         if element not in unique: 
  5.             unique.add(element) 
  6.     return unique 
  1. %timeit easy_way() 
  2. # 48.4 ms ± 11.6 ms per loop (mean ± std. dev. of 7 runs, 10 loops each) 

平均耗時在48毫秒左右,改善明顯,這是因為集合和數組的內在數據結構完全不同,集合使用了哈希表,因此速度會比列表快許多,但缺點在于無序。

接下來看看第2種方式:

2. 直接對數組進行集合轉化,然后再轉回數組:

  1. # 第二種去重方式 
  2. def fast_way() 
  3.     return list(set(DUPLICATES)) 

耗時:

  1. %timeit fast_way() 
  2. # 14.2 ms ± 1.73 ms per loop (mean ± std. dev. of 7 runs, 100 loops each) 

平均耗時14毫秒,這種去重方式是最快的,但正如前面所說,集合是無序的,將數組轉為集合后再轉為列表,就失去了原有列表的順序。

如果現在有保留原數組順序的需要,那么這個方式是不可取的,怎么辦呢?

3. 保留原有數組順序的去重

使用dict.fromkeys()函數,可以保留原有數組的順序并去重:

  1. def save_order(): 
  2.     return list(dict.fromkeys(DUPLICATES)) 

當然,它會比單純用集合進行去重的方式耗時稍微久一點:

  1. %timeit save_order() 
  2. # 39.5 ms ± 8.66 ms per loop (mean ± std. dev. of 7 runs, 10 loops each) 

平均耗時在39.5毫秒,我認為這是可以接受的耗時,畢竟保留了原數組的順序。

但是,dict.fromkeys()僅在Python3.6及以上才支持。

如果你是Python3.6以下的版本,那么可能要考慮第四種方式了。

4. Python3.6以下的列表保留順序去重

在Python3.6以下,其實也存在fromkeys函數,只不過它由collections提供:

  1. from collections import OrderedDict 
  2. def save_order_below_py36(): 
  3.     return list(OrderedDict.fromkeys(DUPLICATES)) 

耗時:

  1. %timeit save_order_below_py36() 
  2. # 71.8 ms ± 16.9 ms per loop (mean ± std. dev. of 7 runs, 10 loops each) 

平均耗時在72毫秒左右,比 Python3.6 的內置dict.fromkeys()慢一些,因為OrderedDict是用純Python實現的。

【責任編輯:趙寧寧 TEL:(010)68476606】

 

責任編輯:趙寧寧 來源: Python實用寶典
相關推薦

2024-11-29 07:32:38

2015-05-04 14:50:48

PHPPHP生成隨機密碼

2017-02-08 12:00:45

PHP性能對比

2024-12-20 12:10:19

2019-12-25 09:53:01

虛擬機技術固態硬盤

2025-04-16 08:40:00

2018-03-01 15:20:59

iOS開發多線程

2010-03-15 14:01:26

JavaScript

2014-06-05 10:22:06

Tomcat 7

2024-10-07 08:40:56

Spring應用程序Java

2017-04-13 15:15:17

Netflix ZuuNginx性能

2022-12-05 17:01:20

MySQL數據庫Oracle

2024-04-24 11:24:43

C#數據去重

2024-10-09 11:31:51

2012-08-06 13:37:35

瀏覽器WindowsUbuntu

2009-07-24 13:17:43

世紀互聯至強CloudEx

2011-08-05 13:41:46

Go

2020-11-03 19:52:54

Java數組編程語言

2016-05-25 10:03:51

JavaScript內存泄露

2010-01-16 11:02:12

Ubuntu性能測試
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 台湾佬久久 | 91在线视频国产 | 日韩国产免费观看 | 成年人在线视频 | 狠狠视频 | 欧美a在线观看 | 天天操夜夜操 | 亚洲一区二区三区免费在线观看 | 欧美一级片 | av网站免费看 | 色综合久久天天综合网 | 国产精品久久久久久久一区探花 | 天天综合久久网 | 嫩草影院网址 | 午夜影院在线观看 | 亚洲人成网亚洲欧洲无码 | 在线中文字幕视频 | 麻豆视频在线免费看 | 日韩在线免费观看视频 | 7777在线| 在线一区 | 黄色一级电影免费观看 | 国产精品免费一区二区三区四区 | 综合精品在线 | 国产在线精品一区 | 男女羞羞视频大全 | 欧美一级二级在线观看 | 日本成人区 | 国产精品99久久久精品免费观看 | 亚洲国产精品一区二区第一页 | 亚洲综合久久精品 | 日韩成年人视频在线 | 精品欧美乱码久久久久久 | 看羞羞视频免费 | 久久69精品久久久久久久电影好 | 国产精品国产成人国产三级 | 北条麻妃一区二区三区在线观看 | 噜噜噜噜狠狠狠7777视频 | 日韩一区二区久久 | 免费在线成人网 | 国产日韩精品一区二区三区 |