中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

Python中的 list comprehension 以及 generator
來源:易賢網 閱讀:6024 次 日期:2015-05-04 14:33:24
溫馨提示:易賢網小編為您整理了“Python中的 list comprehension 以及 generator”,方便廣大網友查閱!

一個小故事

三年前,我在一篇博客里不無自豪的記錄了python編寫的小函數,當時感覺python真強大,11行代碼就寫出了一個配置文件的解析器。

def loadUserInfo(fileName):

userinfo = {}

file = open(fileName, "r")

while file:

line = file.readline()

if len(line) == 0:

break

if line.startswith('#'):

continue

key, value = line.split("=")

userinfo[key.strip()] = value.strip()

return userinfo

最近正在跟同事學習python在數據挖掘中的應用,又專門學習了一下python本身,然后用list comprehension簡化了以下上面的代碼:

def loadUserInfo(file):

return dict([line.strip().split("=")

for line in open(file, "r")

if len(line) > 0 and not line.startswith("#")])

這個函數和上面的函數的功能一樣,都是讀取一個指定的key=value格式的文件,然后構建出來一個映射(當然,在Python中叫做字典)對象,該函數還會跳過空行和#開頭的行。

比如,我想要查看一下.wgetrc配置文件:

if __name__ == "__main__":

print(loadUserInfo("/Users/jtqiu/.wgetrc"))

假設我的.wgetrc文件配置如下:

http-proxy=10.18.0.254:3128

ftp-proxy=10.18.0.254:3128

#http_proxy=10.1.1.28:3128

use_proxy=yes

則上面的函數會產生這樣的輸出:

{'use_proxy': 'yes', 'ftp-proxy': '10.18.0.254:3128', 'http-proxy': '10.18.0.254:3128'}

list comprehension(列表推導式)

在python中,list comprehension(或譯為列表推導式)可以很容易的從一個列表生成另外一個列表,從而完成諸如map, filter等的動作,比如:

要把一個字符串數組中的每個字符串都變成大寫:

names = ["john", "jack", "sean"]

result = []

for name in names:

result.append(name.upper())

如果用列表推導式,只需要一行:

[name.upper() for name in names]

結果都是一樣:

['JOHN', 'JACK', 'SEAN']

另外一個例子,如果想要過濾出一個數字列表中的所有偶數:

numbers = [1, 2, 3, 4, 5, 6]

result = []

for number in numbers:

if number % 2 == 0:

result.append(number)

如果寫成列表推導式

[x for x in numbers if x%2 == 0]

結果也是一樣:

[2, 4, 6]

顯然,列表推導更加短小,也更加表意。

迭代器

在了解generator之前,我們先來看一個迭代器的概念。有時候我們不需要將整個列表都放在內存中,特別是當列表的尺寸比較大的時候。

比如我們定義一個函數,它會返回一個連續的整數的列表:

def myrange(n):

num, nums = 0, []

while num < n:

nums.append(num)

num += 1

return nums

當我們計算諸如myrange(50)或者myrange(100)時,不會有任何問題,但是當獲取諸如myrange(10000000000)的時候,由于這個函數的內部會將數字保存在一個臨時的列表中,因此會有很多的內存占用。

因此在python有了迭代器的概念:

class myrange(object):

def __init__(self, n):

self.i = 0

self.n = n

def __iter__(self):

return self

# for python 3

def __next__(self):

return self.next()

def next(self):

if self.i < self.n:

i = self.i

self.i += 1

return i

else:

raise StopIteration()

這個對象其實實現了兩個特殊的方法:__iter__(對于python3來說,是__next__)和next方法。其中next每次只返回一個值,如果迭代已經結束,就拋出一個StopIteration的異常。實現了這兩個方法的類都可以算作是一個迭代器,他們可以被用于可迭代的上下文中,比如:

>>> from myrange import myrange

>>> x = myrange(10)

>>> x.next()

>>> x.next()

>>> x.next()

但是可以看到這個函數中有很多的樣板代碼,因此我們有了生成器表達式來簡化這個過程:

def myrange(n):

num = 0

while num < n:

yield num

num += 1

注意此處的yield關鍵字,每次使用next來調用這個函數時都會求值一次num并返回,具體的細節可以參考這里。

區別

簡單來說,兩者都可以在迭代器上下文中使用,看起來幾乎是一樣的。不同的地方是generator可以節省內存空間,從而提高執行速度。generator更適合一次性的列表處理,比如只是需要一個中間列表作為轉換。而列表推導則更適合要將列表保存下來,以備后續使用的場景。

這里也有一些討論,可以一并參看。

更多信息請查看IT技術專欄

更多信息請查看技術文章
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
另类av一区二区| 国产欧美日韩综合| 国产日韩在线看| 亚洲桃色在线一区| 欧美另类在线观看| 亚洲精品一区二区在线| 欧美呦呦网站| 亚洲国产精品国自产拍av秋霞| 美女免费视频一区| 在线综合亚洲欧美在线视频| 欧美日韩高清在线| 亚洲精品一区二区三区婷婷月| 欧美日韩国产在线播放网站| 欧美一区二区三区在线| 国产欧美综合在线| 久久精品国产99| 99国产精品久久久久久久久久| 韩国一区电影| 国产精品成人在线| 久久亚洲风情| 欧美一区二区久久久| 亚洲韩国一区二区三区| 国产目拍亚洲精品99久久精品| 欧美伊人影院| 日韩午夜在线| 国产精品美女在线| 香港成人在线视频| 在线成人国产| 欧美视频在线观看免费| 亚洲午夜精品17c| 国产日韩欧美一区二区| 国产精品二区三区四区| 欧美精品久久一区| 久久久久9999亚洲精品| 欧美一区二区三区四区在线| 亚洲老司机av| 激情亚洲网站| 国产美女精品人人做人人爽| 国产日韩欧美在线看| 国产精品麻豆成人av电影艾秋| 国产精品爱啪在线线免费观看| 国产目拍亚洲精品99久久精品| 欧美揉bbbbb揉bbbbb| 欧美在线观看视频| 一区在线免费| 国产人成一区二区三区影院| 欧美久久影院| 国产午夜精品久久久| 伊人久久大香线蕉综合热线| 国产亚洲欧美一区二区| 永久域名在线精品| 日韩亚洲国产欧美| 99天天综合性| 99国产精品一区| 亚洲片在线资源| 亚洲另类自拍| 久久久夜夜夜| 国产精品国产成人国产三级| 国产一区自拍视频| 日韩一级黄色大片| 午夜精品亚洲| 女女同性女同一区二区三区91| 久久综合九色| 欧美日本亚洲| 国产精品久久一卡二卡| 亚洲七七久久综合桃花剧情介绍| 午夜电影亚洲| 欧美日韩另类综合| 在线国产日韩| 欧美一区二区三区日韩视频| 男女激情视频一区| 猫咪成人在线观看| 国内精品久久久久影院 日本资源| 亚洲人成在线播放| 久久久久国产一区二区三区| 欧美色图一区二区三区| 伊甸园精品99久久久久久| 亚洲精选一区二区| 艳妇臀荡乳欲伦亚洲一区| 香蕉成人伊视频在线观看| 欧美成人激情在线| 国产欧美亚洲一区| 91久久综合| 久久尤物视频| 国产女同一区二区| 亚洲综合二区| 国产伦精品一区二区三区免费| 亚洲欧洲日韩综合二区| 亚洲欧美日韩一区二区三区在线观看| 欧美日韩亚洲网| 最新精品在线| 国产在线精品自拍| 性伦欧美刺激片在线观看| 国产精品久久久久9999高清| 99亚洲视频| 欧美午夜精彩| 欧美在线视频二区| 一区二区在线视频| 久久国产视频网站| 国产一区二区按摩在线观看| 欧美在线免费观看视频| 国产精品av免费在线观看| 久久久久国产精品厨房| 亚洲午夜精品久久久久久浪潮| 国产日韩欧美中文在线播放| 久久精品视频在线看| 欧美日韩中文字幕综合视频| 黄色成人在线观看| 欧美日韩一区二区三区免费| 在线亚洲精品| 国产麻豆日韩| 欧美一级二区| 亚洲第一在线视频| 欧美少妇一区二区| 在线亚洲+欧美+日本专区| 欧美午夜精品久久久久久孕妇 | 国产美女搞久久| 国产日韩高清一区二区三区在线| 欧美精品亚洲| 久久久久久久久久码影片| 亚洲五月婷婷| 日韩视频二区| 国产手机视频精品| 欧美日韩免费观看一区二区三区 | 亚洲精品日韩欧美| 国产九区一区在线| 欧美日韩国产在线看| 亚洲一区二区三区久久| 亚洲国产精品久久久久| 国产一区久久久| 国产精品人人爽人人做我的可爱| 欧美在线观看一区二区| 欧美主播一区二区三区| 亚洲国产一区在线| 狠狠色综合网站久久久久久久| 免费毛片一区二区三区久久久| 午夜精品一区二区三区四区| 亚洲欧美日韩另类| 一级日韩一区在线观看| 影音先锋亚洲电影| 国产九九精品视频| 欧美日韩在线另类| 男人插女人欧美| 国产欧美精品国产国产专区| 狠狠色丁香婷综合久久| 亚洲激情女人| 亚洲在线第一页| 午夜精品久久久久久久蜜桃app| 亚洲欧美激情视频在线观看一区二区三区| 在线一区日本视频| 亚洲在线成人| 亚洲午夜电影| 亚洲欧洲一区二区天堂久久| 亚洲美女av网站| 久久精视频免费在线久久完整在线看| 免费成人高清视频| 国产精品成人一区| 永久免费精品影视网站| 欧美一区久久| 国产精品嫩草影院av蜜臀| 亚洲精品日韩一| 免费成人小视频| 一区二区三区在线看| 欧美伊人久久久久久久久影院| 欧美日韩亚洲国产一区| 亚洲伦理在线| 欧美日韩伊人| 宅男噜噜噜66一区二区| 欧美日韩一二三四五区| 亚洲免费观看视频| 欧美日韩免费在线观看| 亚洲小说欧美另类婷婷| 国产精品成人观看视频免费| 亚洲日本va午夜在线电影| 蜜乳av另类精品一区二区| 亚洲盗摄视频| 欧美日韩国产在线播放网站| 一本到12不卡视频在线dvd| 欧美激情亚洲自拍| 亚洲免费av片| 国产精品jizz在线观看美国| 黄色成人精品网站| 欧美一乱一性一交一视频| 国产精品网站在线观看| 午夜免费在线观看精品视频| 国产精品久久久久久av下载红粉| 制服丝袜激情欧洲亚洲| 欧美日韩一区二区三区| 国产精品久久久久高潮| 亚洲欧美在线免费观看| 国产精品久久久亚洲一区 | 欧美精品一区二区三| 日韩视频在线观看国产| 国产一区二区三区在线免费观看| 老**午夜毛片一区二区三区| 一级日韩一区在线观看| 国产性做久久久久久| 久久精品午夜| 欧美一区二区三区在线视频| 一区二区三区精品|