python3 列表解析與generator生成器
阿新 • • 發佈:2019-02-10
t = [1,2,3,4]
print(t)
t = [x+10 for x in t]
print(t)
t = [x+10 for x in range(10)]
print(t)
輸出為:
如程式碼所示的兩種列表解析的情況:
第一種,先建立了一個list物件[],在in後面接這個list物件
第二種,直接在in後面接一個range物件
共同點,in後面的,都是可以迭代的物件。
總結,列表解析的格式為(不考慮列表解析外部的函式或者符號):
關於x的式子(一般就是x自身) for x in 可迭代物件
還可以在後面加if判斷:
關於x的式子(一般就是x自身) for x in 可迭代物件 if 布林表示式
形如:
根據,列表解析,外部的函式或符號來判斷返回的型別:
1.如果外部是(),即小括號。那麼返回生成器generator(注意,此物件也是可以迭代的物件)
2.如果外部是list(),或者[],即中括號。那麼返回list列表。
3.如果外部是tuple(),那麼返回的是tuple元祖。
4.如果外部是set(),或者是{},其沒有使用冒號,那麼返回的是set集合。
5.如果外部是dict{},那麼返回的是dict字典。
列表解析用於檔案:
1.第一種:使用生成器,再使用next方法
g=(x for x in open('test.txt',encoding='utf-8'))
next(g)
當然,你可以用for迴圈來使用這個生成器:
g=(x for x in open('test.txt',encoding='utf-8'))
for line in g:
print(line)
這樣,你就不用擔心出現stopiteration的錯誤了。輸出為:
因為每個line最後面是\n,所以輸出結果之間有空行。
2.第二種,使用list列表
g=[x for x in open('test.txt',encoding='utf-8')]
print(g)
因為list已經一次性把文字的內容,按行存起來了,所以可以直接列印。而上一種情況,則需要手動迭代,或者用for迴圈來迭代。而直接print生成器是沒有意義的。