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

歡迎訪問 生活随笔!

生活随笔

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

python

python 多维list 排序_一行代码的优雅| Python列表生成式

發布時間:2025/3/12 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 多维list 排序_一行代码的优雅| Python列表生成式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

歡迎回來,上一周我們整理了基礎課中三大結構有關內容的具體應用及案例。可以通過以下幾篇推文進行回溯:

Python語言基礎50課

我的Python?-?100天筆記?|D1-D7

我的Python?-?100天筆記?|D8-D14

列表是Python中非常常見的數據結構,在基礎課中也占了不小的篇幅。今天的推送就列表相關的內容再整理。

列表是包含有索引的元素集,其中的元素可由字符、數字、字符串及子列表組成,用 list = []表示。基本操作包括:

  • 增加元素list.append(obj)?在列表末尾添加新的元素?list.insert(index,obj)?能夠在列表任意位置添加新的元素。

  • 刪除元素list.pop(index)?移除索引位置的元素,同時會返還被移除元素的值。del list[index]?移除移除索引位置的元素,但不返回移除元素的值,注意中間是空格。list.remove(obj)?移除第一個匹配到的元素。

  • 修改元素list[index] = obj

  • 查找元素list.index('obj')

  • 列表排序sort(list)?永久性排序。temp_list = sorted(list)?返回一個新建的已排序列表。list.sort(reverse=Ture)?反向排序。

  • 列表切片

    list[start:end:step]?切片是支持步長選擇的。

  • 嵌套列表的使用

    嵌套的列表可以用來表示表格或數學上的矩陣,可以用于記錄多維的數據,但是需要注意的是,嵌套列表不能夠使用以下的方式生成:

    scores = [[0] * 3] * 5print(scores) # [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]# 嵌套的列表需要多次索引操作才能獲取元素

    正確的方式如下(生成式):

    scores = [[0] * 3 for _ in range(5)]scores[0][0] = 95print(scores) # [[95, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

    示例圖如下:

    第011課:常用數據結構之列表

    列表生成式

    [exp?for?iter_var?in?iterable]

    生成式中,首先會將可迭代對象iterable中的每個元素的結果賦值給iter_var,然后通過exp得到一個新的計算值;最后把所有通過exp得到的計算值以一個新列表的形式返回。也就是與下列語句同效:

    L?=?[]
    for?iter_var?in?iterable:
    ????L.append(exp)

    類似的,還有以下兩種可使用的方式:

    #帶過濾功能語法格式
    [exp?for?iter_var?in?iterable?if_exp]

    #循環嵌套語法格式
    [exp?for?iter_var_A?in?iterable_A?for?iter_var_B?in?iterable_B]

    也就是在之前的基礎上,添加判斷條件或嵌套循環。

    例如,過濾出一個指定的數字列表中值大于20的元素

    L?=?[3,?7,?11,?14,22,?33,?26,?57,?99]
    #?不使用列表生成式實現
    list_new?=?[]
    for?x?in?L:
    ????if?x?20:
    ????????list_new.append(x)

    #?使用列表生成式實現
    list_newi?=?[x?for?x?in?L?if?x?>?20]

    再來一個例子:把一個列表中所有的字符串轉換成小寫,非字符串元素移除

    L?=?['TOM',?'Peter',?10,?'Jerry']
    #?用列表生成式實現
    list1?=?[x.lower()?for?x?in?L?if?isinstance(x,?str)]

    #?用map()和filter()函數實現
    list2?=?list(map(lambda?x:?x.lower(),?filter(lambda?x:?isinstance(x,?str),?L)))

    我們在之前推送中聊過這類 map()和filter() 高階函數的簡單用法,高階函數的英文為 Higher-order function ,怎么理解呢。我們從內置函數再來理解一下上面的提及到的函數名定義規則與變量一致,換句話說函數名也可以認為是一個變量。

    那么,既然變量可以指向函數,函數的參數能接收變量,那么一個函數就可以接收另一個函數作為參數,這種函數就稱之為高階函數。

    高階函數,我們以?map(f,list) #對列表內元素逐個處理,舉個栗子:

    #?對每一個元素進行平方計算
    def?f(x):
    ????return?x*x

    for?i?in?map(f,[1,2,3,4,5,6,7]):
    ????print(i)

    #?使用正則取列表中所有元素的關鍵字,省略部分代碼
    import?re
    def?id(x):
    ????return?re.findall(r'ORF\d+_(.*?):',x)[0]

    for?line?in?f:
    ????if?line.startswith('P'):
    ????????line?=?line.split('\t')
    ????????line1?=list(map(id,line))
    ????????print(line1)

    比較來看,對于大部分需求來講,使用列表生成式和使用高階函數都能實現。這對于那些元素數量很大或無限的可迭代對象來說顯然是更合適的,因為可以避免不必要的內存空間浪費。

    enumerate函數

    遍歷列表時,課程中有一個函數值得關注 enumerate,該函數在循環遍歷時會取到一個二元組,解包之后第一個值是索引,第二個值是元素,下面是一個簡單的對比。

    items?=?['Python',?'Java',?'Go',?'Swift']

    for?index?in?range(len(items)):
    ????print(f'{index}:?{items[index]}')

    for?index,?item?in?enumerate(items):
    ????print(f'{index}:?{item}')

    第013課:列表和元組的應用

    終于梳理了生成式的一些用法,同時從比較中引申出不同方法實現相同目的的用法,希望對你有啟發~


    參考資料

    ? jackfrued/ Python-Core-50-Courses

    ? https://www.cnblogs.com/yyds/p/6281453.html

    往期推薦

    ComplexHeatmap包更新支持pheatmap轉換

    ??4種繪制帶誤差線的柱形圖


    生信技能樹目前已經公開了三個生信知識庫,記得來關注哦~

    每周文獻分享

    https://www.yuque.com/biotrainee/weeklypaper

    腫瘤外顯子分析指南

    https://www.yuque.com/biotrainee/wes

    生物統計從理論到實踐

    https://www.yuque.com/biotrainee/biostat


    友情宣傳

    強烈建議你推薦給身邊的博士后以及年輕生物學PI,多一點數據認知,讓他們的科研上一個臺階:

    ?生信爆款入門-全球聽(買一得五)(第4期) ,你的生物信息學入門課。?數據挖掘第2期(兩天變三周,實力加量),醫學生/醫生首選技能提高課。?生信技能樹的2019年終總結?,你的生物信息學成長寶藏?2020學習主旋律,B站74小時免費教學視頻為你領路

    總結

    以上是生活随笔為你收集整理的python 多维list 排序_一行代码的优雅| Python列表生成式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。