列表解析與生成器表示式
列表推導式:
egg_list=for i in range(100):
'egg%s
' %i)
(egg_list)
l=['
egg%s
' %i for i in range(100) if i > 50]
print(l)
在乙個列表中 [ ] ,將for的迴圈寫在列表的右側。[ for i in rang(100) ] ,將for迴圈的子**寫在左邊, [ 'num%s' %i for i in rang(100) ]。就是列表推導式的寫法。
在列表裡也是可以加 if 判斷的。
列表推導式的語法:
[ expression for item1 in iterable1 if condition1
for item2 in iterable2 if condition2
for itemn in iterablen if conditionn
類似於:
res = [ ]
for item1 in iterable1:
if condition1:
for item2 in iterable2:
if condition2:
for itemn in iterablen:
if conditionn:
優點:方便,改變了程式設計習慣。是宣告式程式設計。
用處:
l=[1,2,3,4]s='hello'#
#l1=[(num,s1) for num in l if num > 2 for s1 in s]
#print(l1)
#l1=
#for num in l:
#for s1 in s:
#t=(num,s1)##
print(l1)
#import os
#g=os.walk('c:\\george')
#file_path_list=
#for i in g:
## print(i)
#for j in i[-1]:##
#print(file_path_list)##
g=os.walk('c:\\george')
#l1=['%s\\%s' %(i[0],j) for i in g for j in i[-1]]
#print(l1)
生成器表示式:
將列表的 [ ] 換為( )。即可用next,一次乙個的取出下乙個值。
##l=['egg%s' %i for i in range(100)]
#print(l)
#g=l=('egg%s' %i for i in range(1000000000000000000000000000000000000))
#print(g)
#print(next(g))
#print(next(g))
#for i in g:
#print(i)
生成器表示式的語法:
與列表推導式的區別在於乙個是 [ ] ,乙個是( )。
( expression for item1 in iterable1 if condition1
for item2 in iterable2 if condition2
for itemn in iterablen if conditionn
生成器表示式的優點: 省記憶體,乙個只生產乙個值在記憶體中。
生成器表示式的應用:讀取乙個大檔案的所有內容。並且處理行。
f = open('a.txt')
g = (line.strip() for line in
f) #去除檔案中的每一行的空格。
list(g)
#因為g可以迭代。所以可以轉成列表。
#f=open('a.txt')#l=
#for line in f:
#line=line.strip() #弊端,在用大量記憶體空間。
#
列表表示式和生成器表示式的作用:
用來進行宣告是程式設計。
b.txt 檔案
計算b.txt 檔案裡的每一類的商品的總價錢。
#money_l=
#with open('b.txt') as f:
#for line in f:
#goods=line.split()
#res=float(goods[-1])*float(goods[-2])##
print(money_l)##
f=open('b.txt')
#g=(float(line.split()[-1])*float(line.split()[-2]) for line in f)##
print(sum(g))
#with open('b.txt') as f:
#print(sum((float(line.split()[-1])*float(line.split()[-2]) for line in f)))
#with open('b.txt') as f:
#res=(line.split() for line in f)
#print(res)
#dic_g=( for i in res)
#print(dic_g)##
##
#取出單價》10000
with open('
b.txt
') as f:
res=(line.split() for line in
f)
#print(res)
dic_g=( for i in res if float(i[1]) > 10000)
(dic_g)
(list(dic_g))
#for i in dic_g:
#print(i)
列表解析式和生成器表示式
列表解析式 expr for iter var in iterable expr for iter var in iterable if cond expr 例如 i 10 for i in range 10 結果 0,10,20,30,40,50,60,70,80,90 i 10 for i in...
Python中列表解析式與生成器表示式
生成器表示式 生成器和列表解析式對比 集合解析式 字典解析式 總結習題 非列表解析式寫法 even for x in rang 10 if x 2 0 列表解析式寫法 even x for x in range 10 if x 2 0 以下例子返回值會是什麼?newlist print i for ...
列表解析與生成器
1 語法 返回值 for 元素 in 可迭代物件 if 條件 使用中括號,內部是for迴圈,if條件語句可選 返回乙個新列表 高階 expr for i in iterable for j in iterable2 等價於 ret for i initerable1 for j in iterabl...