列表生成式
需求:迴圈0-10,把其中每個值加一並列印
# 文藝青年版n = list(range(10))
for index, i in enumerate(n):
n[i] += 1
print(n)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 執行結果
# 裝逼青年版
n = list(range(10))
print(list(map(lambda x:x+1, n)))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 執行結果
# 更加裝逼青年版(列表生成式)
n = [i+1 for i in range(10)]
print(n)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 執行結果
列表生成式作用就是在一行內實現對列表的操作,其中 a 可以放任何東西,如字串, 字典,元祖等 , i可以進行普通運算,也可以進行三元運算,比如,實現i< 5, 什麼也不幹,如果i >5, 自己乘自己
n = list(range(10))a = [i if i < 5 else i*i for i in n]
print(a)
[0, 1, 2, 3, 4, 25, 36, 49, 64, 81] #執行結果
n = 'alex'n = [i for i in range(10)]
print(n)
['a', 'l', 'e', 'x'] # 執行結果
生成器
生成器特點:
1.要什麼不會立即產生,只能乙個乙個產
2.只能往前走,不能回退
3.走到最後一步的時候,就會報錯
根據上面的需求,以個列表生成器可以生成乙個列表,但是列表的容量是有限的,因為受到記憶體的限制。
如果我要建立乙個包含100w元素的列表,他占用的記憶體很大,而且如果我只需要訪問前面的一些元素,那後面的就白建立了。也就是建立好了列表取值的同時,不是知道什麼時候停,這個方法是直接建立乙個100w資料的列表,然後取的時候乙個乙個取,這種低效浪費空間。現在有個需求,就是滿足我取到著100w個資料而且省空間,就可以先生成乙個1,然後下次呼叫的時候生成2,依次類推,這樣不涉及列表的切片操作,也就是說再呼叫資料之前,不會一次生成100w的資料,但知道資料的規律,知道要什麼資料,然後乙個乙個往上加,就是取得時候直接呼叫乙個公式,每取一次資料加1.
舉例:我現在有乙個工廠,要給使用者提供100w個杯子,使用者給你提供了10%的預付款,你不能就一下子給他產了100w個,要是他只要了1000個,就倒閉了,那你就涼涼了。所以第一種方案可以讓他要幾個你生產幾個,也就是邊取邊生產,這樣的話你就不會有庫存,放到計算機裡邊就是不占用記憶體空間了。這種方法就是生產能力,放到這裡就是這種方法,這種方法需要提前定義好,再python中,這種一邊迴圈一邊計算的方法就是生成器:generator
#原來,列表生成式裡是這麼寫的a = [i for i in range(5)]
print(a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 執行結果
# 現在
a = (i for i in range(10))
print(a)
at 0x0000023520717c50> # 執行結果
# 生產10個資料的演算法已經存到a裡邊了,也就是說a有生產能力了
#呼叫next(a)
0next(a)
1next(a)
2 # 這裡邊是由序號的
如果生產到一半,使用者不要了,那麼因為你的演算法已經有了。所以直接調就可以了
aat 0x0000023520717c50>
next(a)
3
但是只能一直往前走,就是往前一直加1,走到最後就會報錯
next(a)4next(a)
traceback (most recent call last):
file "", line 1, in stopiteration #可以理解成停止生產
生成器的兩種建立方式:
1.列表生成式()
2.函式()
區別:列表生成式最多只能生成乙個複雜的三元運算,涉及到比較複雜的,只能用函式
舉例 : 如果你要開啟乙個用函式定義好的檔案,不能做到先讀一部分然後處理完再讀一部分,這樣用生成器就可以實現,其實在學檔案操作的時候,for迴圈檔案一行一行的讀就是生成器
2 3 13 Python 函式高階 列表生成式
列表生成式即list comprehensions,是python內建的非常簡單卻強大的可以用來建立list的生成式。舉個例子,要生成list 1,2,3,4,5,6,7,8,9,10 可以用list range 1,11 list range 1,11 1,2,3,4,5,6,7,8,9,10 但...
python函式,列表生成式及高階函式
函式 函式生命成後若不呼叫則不會執行 形式引數 位置引數 可變引數 預設引數 關鍵字引數 返回值 返回值為函式運算的結果,返回函式執行結果,可以以與元組形式返回多個返回值 eg def sum a,b return a b result sum 1,2 print result 變數的作用域區域性變...
python高階特性 列表生成式
本文 廖雪峰的官方 列表生成式即list comprehensions,是python內建的非常簡單卻強大的可以用來建立list的生成式。舉個例子,要生成list 1,2,3,4,5,6,7,8,9,10 可以用list range 1,11 list range 1,11 1,2,3,4,5,6,...