您好,登錄后才能下訂單哦!
python中列表生成式和列表生成式器有什么區別?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
一、列表生成式
#列表生成式是快速生成一個列表的一些公式 numbers = [] for x in range(0,101): numbers.append(x) print(numbers) #[要放入列表的數據 簡單的表達式1 表達式2] #x for x in range(0,101) for循環遍歷出來的值,放入列表中 numbers =[x for x in range(0,101)] print(numbers)
二、小例子
#列表中存放0-100的偶數 #普通寫法 numbers = [] for x in range(0,101): if x%2 == 0: numbers.append(x) print(numbers) #for 循環遍歷0-101的數字,如果數字對2 取余==0,表示是偶數,x放在列表中 numbers = [x for x in range(0,101) if x%2==0] print(numbers) #列表中存放0-100的奇數 numbers = [x for x in range(0,101) if x%2!=0] print(numbers)
list1 = ['asd','sdf','freg','sfag','refv','aser','sdfr','dfgi'] #取出所有帶a的 #普通寫法 rs_list = [] for s in list1: if 'a' in s: rs_list.append(s) print(rs_list) #列表生成式 list2 = [x for x in list1 if 'a' in x] print(list2)
#普通雙重for循環 list7 =[] for x in range(0,10): for y in range(10,20): s = x*y list7.append(s) print(list7) #支持雙重for循環 list3 = [x*y for x in range(0,10) for y in range(10,20)] print(list3)
三、字典生成式
#dict_1.item() list4 = [('name','zhangsan'),('age',22),('phone',110)] #for循環遍歷列表,將列表中小元組key和value取出,作為字典中的key:value dict_1 = {key:value for key,value in list4} print(dict_1)
四、列表生成器和列表生成式的區別
list6 = [x for x in range(10)] print(list6) #generator列表生成器 #生成的是一個對象,不會把數據直接創建出來,當for遍歷的時候,生成器對象會調用next()函數,獲取下一個要生成的數據 generator = (x for x in range(10)) #生成式對象可以調用next()函數獲取下一個要生成的數字,如果next()函數沒有獲取到下一個數據,會拋出異常StopIteration ,程序出錯 #生成式對象可以使用for遍歷,使用next()不停的獲取下一個數據,如果沒有下一個數據循環結束 for x in generator: print(x)
列表生成式: 會將所有的結果全部計算出來,把結果存放到內存中,如果列表中數據比較多,會占用過多的內存空間,可能導致MemoryError內存錯誤或者導致程序在運行時出現卡頓的情況
列表生成器:會創建一個列表生成器對象,不會一次性的把所有結果都計算出來,如果需要序號獲取數據,可以使用next()函數來獲取,但要注意,一旦next()函數獲取不到數據,會導致出現StopIteration異常錯誤,可以使用 for循環遍歷生成器對象,獲取所有數據
視情況而定,如果數據量比較大,推薦使用生成器;
python2.7中就是 range(生成式) 和xrange(生成器) 的區別
看完上述內容,你們掌握python中列表生成式和列表生成式器有什么區別的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。