列表解析與生成器表示式

2022-06-17 20:12:14 字數 3195 閱讀 4572

列表解析與生成器表示式

列表推導式:

egg_list=

for i in range(100):

'egg%s

' %i)

print

(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)

print

(dic_g)

print

(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...