在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    文章

    7122

    瀏覽量

    89355
  • 存儲
    +關注

    關注

    13

    文章

    4343

    瀏覽量

    86042
  • python
    +關注

    關注

    56

    文章

    4805

    瀏覽量

    84926
  • 數組
    +關注

    關注

    1

    文章

    417

    瀏覽量

    25997
收藏 人收藏

    評論

    相關推薦

    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 ?1627次閱讀

    使用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 ?765次閱讀
    如何運用<b class='flag-5'>Python</b><b class='flag-5'>列表</b>的元素比較解決問題

    python列表序列操作教程

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

    介紹python列表的邊界和嵌套

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

    python列表特定方法有哪些

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

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

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

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

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

    Python調用JS的 4 方式

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

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

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

    python列表和數組的區別

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

    python怎樣讓列表里的數相加

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

    python如何遍歷列表并提取

    是一有序的可變集合,可以容納任意類型的元素。在Python中,列表用方括號[ ]表示,其中的元素可以通過索引進行訪問。索引是從0開始,表示列表中元素的位置。 在遍歷
    的頭像 發表于 11-23 15:55 ?1474次閱讀
    主站蜘蛛池模板: 久草色香蕉| 免费黄色欧美| 天天舔天天干| 天天摸夜夜摸成人免费视频| 亚洲第一视频在线观看| 亚洲dv| 日韩手机看片| 91久久人澡人人添人人爽| 国产成人啪午夜精品网站男同| 一级片a级片| 国产精品虐乳在线播放| 日本成人免费网站| 日本不卡免费新一区二区三区| 欧美日韩国产在线一区| 黄色网址你懂得| 777成了人乱视频| 日本特黄视频| 啪啪免费视频网站| 免费看啪啪网站| 午夜激情婷婷| 午夜日韩视频| 欧美色视频日本| 成人综合在线观看| 日本高清视频色| h视频在线看| 亚洲成人av| 鲁久久| 亚洲午夜网| 小屁孩cao大人免费网站| 日韩成人影院| 免费午夜影片在线观看影院 | 日本三级在线观看免费| 久久精品视频9| 黄欧美| 亚洲欧美性另类春色| 俄罗斯欧美色黄激情| 五月激情网站| a欧美视频| 你懂的网站在线播放| 亚洲第一黄色网址| 夜夜bb|