色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python列表去重的4種方式

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-11-02 10:46 ? 次閱讀

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

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

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

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

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

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

# 第一種方式
def easy_way():
    unique = []
    for element in DUPLICATES:
        if element not in unique:
            unique.append(element)
    return unique

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

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

圖片

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

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

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

接下來看看第2種方式:

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

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

耗時:

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

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

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

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

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

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

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

%timeit save_order()
# 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提供:

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

耗時:

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

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7134

    瀏覽量

    89382
  • 存儲
    +關注

    關注

    13

    文章

    4350

    瀏覽量

    86060
  • python
    +關注

    關注

    56

    文章

    4807

    瀏覽量

    84942
  • 數組
    +關注

    關注

    1

    文章

    417

    瀏覽量

    26000
收藏 人收藏

    評論

    相關推薦

    python連接列表方式

    , 2, 3, 4, 5, 6]5、使用列表推導式Python 里對于生成列表、集合、字典,有一套非常 Pythonnic 的寫法。那就是列表
    發表于 04-07 17:04

    Python 編程常用的12基礎知識匯總

    Python 編程中常用的12 基礎知識總結:正則表達式替換,遍歷目錄方法,列表按列排序、,字典排序,字典、
    發表于 11-15 14:11 ?538次閱讀
    <b class='flag-5'>Python</b> 編程常用的12<b class='flag-5'>種</b>基礎知識匯總

    小猿圈python學習之Python列表list合并的4方法

    Python作為目前市面上最常用的編程語言之一,贏得了我們很多技術人員的喜愛,同時越來越多的人紛紛開始學習python,今天小猿圈就給大家分享在python3中合并列表
    發表于 05-16 21:37 ?1628次閱讀

    使用Python實現對excel文檔及求和的方法和代碼說明

    近期有不少小伙伴在觀看咱們扣丁學堂的Python 視頻直播課程,在課程結束后有不少的小伙伴詢問老師一些問題, 今天小編給大家整理一下學員的問題: Python 對excel 文檔
    發表于 10-10 17:36 ?16次下載
    使用<b class='flag-5'>Python</b>實現對excel文檔<b class='flag-5'>去</b><b class='flag-5'>重</b>及求和的方法和代碼說明

    如何運用Python列表的元素比較解決問題

    在用python處理多個列表元素時,需要處理的信息一般比較多且雜。這時運用Python列表元素比較的方法,就能快速處理列表信息,能更輕松訪問
    的頭像 發表于 02-17 15:04 ?766次閱讀
    如何運用<b class='flag-5'>Python</b><b class='flag-5'>列表</b>的元素比較解決問題

    python列表序列操作教程

    python列表也是序列對象,可以進行序列通用的操作,類似字符串序列的操作。
    的頭像 發表于 02-23 15:04 ?679次閱讀

    介紹python列表的邊界和嵌套

    本文介紹python列表的邊界和嵌套。只能訪問python列表范圍內的項,python列表可以嵌
    的頭像 發表于 02-27 14:49 ?961次閱讀

    python列表特定方法有哪些

    python列表類似其他語言的數組,但是python列表的元素(項)可以同時為不同類型的對象,即沒有固定類型約束。
    的頭像 發表于 02-27 14:51 ?511次閱讀

    Python列表的基本概念、常用操作及實際應用

    Python列表是一強大的數據結構,用于在程序中存儲和操作一系列的值。列表是可變的(mutable),可以動態地增加、刪除和修改其中的元素。在Py
    的頭像 發表于 04-16 10:42 ?1862次閱讀

    Python字典組成的數組怎么進行

    你知道嗎?如果數組是字典組成的,直接對數組內的字典采用set的方式進行,會報錯: test = [{ "a" : 1}, { "a" : 1}, { "a" : 3}, { "b" : 4
    的頭像 發表于 10-17 11:26 ?491次閱讀

    Python調用JS的 4 方式

    Python 實現 本文將聊聊利用 Python 調用 JS 的4方式 2. 準備 以一段簡單的 JS 腳本為例,將代碼寫入到文件中
    的頭像 發表于 10-30 09:41 ?755次閱讀

    Python 字典組成的數組怎么進行

    你知道嗎?如果數組是字典組成的,直接對數組內的字典采用set的方式進行,會報錯: test = [{ "a" : 1}, { "a" : 1}, { "a" : 3}, { "b" : 4
    的頭像 發表于 11-01 10:55 ?492次閱讀

    python列表和數組的區別

    內部實現、性能、操作方式等多個方面進行詳細分析,以幫助讀者更好地理解它們之間的區別和適用場景。 一、內部實現: 列表(List): Python中的列表是一
    的頭像 發表于 11-21 15:13 ?2461次閱讀

    python怎樣讓列表里的數相加

    Python是一功能強大的編程語言,可以用于處理各種各樣的數學運算和數據操作。在Python中,我們可以使用簡單的代碼將列表中的數字相加。 首先,我們需要創建一個包含數字的
    的頭像 發表于 11-22 09:53 ?2034次閱讀

    python如何遍歷列表并提取

    是一有序的可變集合,可以容納任意類型的元素。在Python中,列表用方括號[ ]表示,其中的元素可以通過索引進行訪問。索引是從0開始,表示列表中元素的位置。 在遍歷
    的頭像 發表于 11-23 15:55 ?1478次閱讀
    主站蜘蛛池模板: 亚洲 天堂 欧美 日韩 国产| 久久99国产精品无码AV| 国产99视频精品一区| 精品一区二区三区在线成人| 秋霞电影在线观看午夜伦| 亚洲 欧美 国产 在线 日韩| chinesevideoshd性舞| 国产剧情福利AV一区二区| 免费观看的毛片| 亚洲免费观看| 国产99精品在线观看| 暖暖视频免费高清在线观看 视频| 亚洲国产精品99久久久久久| xxx成熟xxx| 老司机深夜福利ae 入口网站| 午夜免费小视频| 成人无码精品1区2区3区免费看 | 精品视频在线一区| 色综合久久88色综合天天提莫 | 高清国语自产拍在线| 牛和人交videos欧美| 中文字幕在线久热精品| 国产午夜在线精品三级a午夜电影| 青青草原伊人| 91popny蜜桃臀| 久青草国产在视频在线观看| 亚洲日韩乱码人人爽人人澡人| 国产精品久久久久久久久无码| 日本人xxxⅹ18hd19hd| bbwvideoa欧美老妇| 欧美91精品久久久久网免费| 5566av资源| 么么哒日本影院| 最新无码专区在线视频| 九色PORNY真实丨首页| 亚洲精品色播一区二区| 国产婷婷综合在线视频中文| 无码内射成人免费喷射| 给个男人都懂的网址2019| 色悠悠电影网| 国产精品丰满人妻AV麻豆|