1. 程式人生 > >python基礎----列表生成式、生成器表示式

python基礎----列表生成式、生成器表示式

結論:

1.把列表解析的[]換成()得到的就是生成器表示式

2.列表解析與生成器表示式都是一種便利的程式設計方式,只不過生成器表示式更節省記憶體

3.Python不但使用迭代器協議,讓for迴圈變得更加通用。大部分內建函式,也是使用迭代器協議訪問物件的。例如, sum函式是Python的內建函式,該函式使用迭代器協議訪問物件,而生成器實現了迭代器協議,所以,我們可以直接這樣計算一系列值的和:

sum(x ** 2 for x in xrange(4))

而不用多此一舉的先構造一個列表:

sum([x ** 2 for x in xrange(4)]) 

一、列表生成式

#三元表示式
name='alex'
name='egon'

res='SB' if name == 'alex' else 'shuai'
print(res)
#例子1
egg_list=[]

for i in range(100):
    egg_list.append('egg%s' %i)
print(egg_list)

l=['egg%s' %i for i in range(100) if i > 50]
print(l)
#例子2
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)
        l1.append(t)
print(l1)
#例子3
import os
g=os.walk('C:\\egon')
file_path_list=[]
for i in g:
    # print(i)
    for j in i[-1]:
        file_path_list.append('%s\\%s' %(i[0],j))

print(file_path_list)

g=os.walk('C:\\egon')
l1=['%s\\%s' %(i[0],j) for i in g for j in i[-1]]
print(l1)

二、生成器表示式

#例子1
l=['egg%s' %i for i in range(100)]
print(l)

g=l=('egg%s' %i for i in range(10000))
print(g)
print(next(g))
print(next(g))
for i in g:
    print(i)
#例子2
f=open('a.txt')
l=[]
for line in f:
    line=line.strip()
    l.append(line)

print(l)   #列印的結果是每行內容組成的列表。

f.seek(0)
l1=[line.strip() for line in f]
print(l1)

f.seek(0)
g=(line.strip() for line in f)
print(g)   #列印的是例項的地址
print(next(g))   #使用next函式後,跳到列表第一項。
#例子3
f=open('a.txt')
g=(line.strip() for line in f)

l=list(g)   #list() -> new empty list  ;  list(iterable) -> new list initialized from iterable's items
print(l)

nums_g=(i for i in range(3))

# print(sum([1,2,3,4]))
print(sum(nums_g))
#例子4
money_l=[]
with open('b.txt') as f:
    for line in f:
        goods=line.split()  # Split a pathname.  Returns tuple "(head, tail)" where "tail" is everything after the final slash.  Either part may be empty.
        res=float(goods[-1])*float(goods[-2])
        money_l.append(res)
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)))
#例子5
res=[]
with open('b.txt') as f:
    for line in f:
        # print(line)
        l=line.split()
        # print(l)
        d={}
        d['name']=l[0]
        d['price']=l[1]
        d['count']=l[2]
        res.append(d)
print(res)

原文:https://www.cnblogs.com/wangyongsong/p/6700210.html#top