python列表高級(jí)操作——快來(lái)看看你會(huì)多少!

      網(wǎng)友投稿 944 2022-05-30

      (1)列表生成式(高級(jí)用法)

      列表推導(dǎo)式(List Comprehension)是一種簡(jiǎn)化代碼的優(yōu)美方法。官方文檔——**列表推導(dǎo)式提供了一種創(chuàng)建列表的簡(jiǎn)潔方法。**使用列表推導(dǎo)式能夠非常簡(jiǎn)潔的構(gòu)造一個(gè)新列表,只需要用一個(gè)簡(jiǎn)潔的表達(dá)式即可對(duì)得到的元素進(jìn)行轉(zhuǎn)換變形。

      使用Python列表推導(dǎo)式的語(yǔ)法格式: variable = [out_exp_res for out_exp in input_list if out_exp == 2] out_exp_res:列表生成元素表達(dá)式,可以是有返回值的函數(shù); for out_exp in input_list:迭代input_list,將out_exp傳入out_exp_res表達(dá)式中; if out_exp == 2:判斷根據(jù)條件可以過(guò)濾哪些值。

      第一個(gè):基本使用

      慣性思維——常規(guī)方法解決:

      list_end = [] for x in range(10): list_end.append(x**2) print(list_end)

      借由列表推導(dǎo)式——一行代碼解決:

      list_end1 = [x**2 for x in range(10)] print(list_end1)

      二者輸出都為:

      傳統(tǒng)方法實(shí)現(xiàn):

      python列表高級(jí)操作——快來(lái)看看你會(huì)多少!

      nums = [] for x in range(30): if x % 3 == 0: nums.append(x) print(nums)

      使用列表推導(dǎo)式一行代碼解決:

      nums1 = [x for x in range(30) if x % 3 == 0] print(nums1)

      二者輸出都為:

      第二個(gè):升級(jí)版使用——使用列表生成式的同時(shí)使用函數(shù)處理

      需求:首先獲取30以內(nèi)能夠整除3的整數(shù),然后一次輸出所獲得整數(shù)的平方。

      def squared(x): return x**2 end = [squared(x) for x in range(30) if x % 3 == 0] print(end)

      第三個(gè):高級(jí)版使用——?jiǎng)h選列表中特定元素的高級(jí)操作

      在python程序中,有時(shí)候篩選列表中的某些特定元素時(shí),篩選標(biāo)準(zhǔn)無(wú)法簡(jiǎn)單的表示在列表推導(dǎo)式或生成器表達(dá)式中,例如當(dāng)篩選過(guò)程涉及異常處理或者其他一些復(fù)雜的細(xì)節(jié)時(shí)。此時(shí)可以考慮將處理篩選功能的代碼放到單獨(dú)的功能函數(shù)中,然后使用內(nèi)建的filter()函數(shù)進(jìn)行處理。

      需求:篩選指定列表中的所有整數(shù)元素!

      values = ['1', '2', '-3', '-', '4', 'N/A', '5'] def is_int(val): try: x = int(val) return True except ValueError: return False # 注意:因?yàn)槭褂煤瘮?shù)filter()創(chuàng)建了一個(gè)迭代器,所以想要得到一個(gè)列表形式的結(jié)果,必須在filter()前面加上list()函數(shù)。 isvals = list(filter(is_int, values)) print(isvals)

      (2)刪除列表中的重復(fù)元素并保持順序不變

      第一個(gè)版本:

      需求:刪除列表中重復(fù)出現(xiàn)的元素,并且保持剩下元素的顯示順序不變。如果序列中保存的元素是可散列的(hashable),那么此功能可以使用集合和生成器實(shí)現(xiàn)。

      知識(shí)點(diǎn)補(bǔ)給站: 如果一個(gè)對(duì)象是可散列的,那么在它的生存期內(nèi)必須是不可變的,這需要有一個(gè)__hash__()方法。在python程序中, 整數(shù),浮點(diǎn)數(shù),字符串和元組都是不可變的。

      上代碼:

      def fun(items): seen = set() for item in items: if item not in seen: yield item seen.add(item) if __name__ == '__main__': a = [5, 3, 3, 8, 6, 5, 9] print(a) print(list(fun(a)))

      第二個(gè)版本:

      上述代碼有個(gè)缺陷——只有當(dāng)序列中的元素是可散列的時(shí)候才能實(shí)現(xiàn)功能。如果想在不可散列的對(duì)象序列中實(shí)現(xiàn)此功能,該如何實(shí)現(xiàn)呢?

      上代碼:

      def fun(items, key=None): seen = set() for item in items: val = item if key is None else key(item) if val not in seen: yield item seen.add(val) if __name__ == '__main__': a = [ {'x' :2, 'y':3}, {'x' :1, 'y':4}, {'x' :2, 'y':3}, {'x' :2, 'y':3}, {'x' :10, 'y':15} ] print(a) print(list(fun(a, key=lambda a: (a['x'], a['y']))))

      注意:上述代碼中函數(shù)fun()中的參數(shù)key的功能是將序列中的元素轉(zhuǎn)換為可散列的類型,這樣做的目的是檢測(cè)重復(fù)選項(xiàng)。

      5G教育 Python 數(shù)據(jù)結(jié)構(gòu)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:2019數(shù)字中國(guó)創(chuàng)新大賽:文化傳承漢字書法多場(chǎng)景識(shí)別賽題解讀
      下一篇:Python進(jìn)階(四十九)-初識(shí)Flask Blueprint
      相關(guān)文章
      亚洲一级特黄特黄的大片| 亚洲人成在线播放| 亚洲色成人WWW永久在线观看| 亚洲天堂一区在线| 亚洲欧洲日产国码二区首页| 亚洲卡一卡2卡三卡4卡无卡三| 久久被窝电影亚洲爽爽爽| 亚洲人成网站在线观看播放| 亚洲精品自产拍在线观看| 亚洲人成影院在线无码按摩店 | 好看的电影网站亚洲一区| 亚洲综合色自拍一区| 一本久久a久久精品亚洲| 亚洲综合av永久无码精品一区二区| 国产亚洲精品自在线观看| 中文字幕亚洲一区| 亚洲精品无码永久中文字幕| 久久精品国产亚洲沈樵| 亚洲国产精品高清久久久| 亚洲av无码一区二区三区网站 | 亚洲人成图片小说网站| 国产V亚洲V天堂无码| 久久综合九九亚洲一区| 亚洲韩国—中文字幕| 亚洲欧洲日产v特级毛片| 亚洲综合色区中文字幕| 亚洲色大成网站www| 亚洲另类无码专区丝袜| 国产成人亚洲综合无| 国产精品亚洲综合一区| 国产亚洲精品成人AA片新蒲金| 亚洲精品无码久久久久| 亚洲伊人久久大香线蕉苏妲己| 亚洲国产美女在线观看| 亚洲综合精品成人| 国产成人高清亚洲一区久久| 狠狠综合久久综合88亚洲| 亚洲av日韩av高潮潮喷无码| 亚洲男人电影天堂| 亚洲色大成网站www永久男同| 深夜国产福利99亚洲视频|