Python三元式-リスト解析-ジェネレータ式

2107 ワード

さんげんしき
三元表現はif...elseの簡略版です.
x=1
y=2
res=x if x>y else y   #      ,True       ,False       
print(res)

リスト解析
リスト解析は、リストをすばやく生成するために使用され、コードを簡潔にすることができます.
l=[i for i in range(10)]
print(l)

l=['book%s' %i for i in range(10) if i>5 if i<7]
print(l)

計算二乗などの古いリストを計算します.
l=[1, 2, 3, 4, 5]
l2=[items**2 for items in l if items**2 <16]
print(l2)

リストの値をフィルタします.
l=['book1','book2','book3','pc','iphone']
l2=[i for i in l if i.startswith('book')]
print(l2)

ジェネレータ式
ジェネレータ式は、次のような反復器を生成するために主に使用されます.
l=['book1','book2','book3','pc','iphone']
l2=(i for i in l if i.startswith('book'))
print(next(l2))
print(next(l2))
print(next(l2))

リストの中かっこ[]を丸カッコ()に変更すると、ジェネレータ式になります.これは主に大きなファイルと無限のリストの問題を処理するために使用されます.ファイルの内容を巡回すると、最も長い行の長さが見つかります.
with open('a.txt',encoding='utf-8') as f:
    g=max(len(i) for i in f)   # max    next  ,         ,       ,            
    print(g)

リストとジェネレータの値を直接計算できます.
print(sum([1,2,3]))      #       
print(sum(i for i in range(4)))     #       

ファイル内の関連データの合計操作を行う場合:ファイルa.txtの内容は:
a  100   5
b  20     100
c  5000  2
d  10000  3

2番目の列が単価の場合、3番目の列が数量の場合、合計金額を求めます.
with open('a.txt',encoding='utf-8') as f:
    g=(float(i.split()[1])*int(i.split()[2]) for i in f)
    print(sum(g))

同様に、上のテキストの内容をフォーマットし、フィルタ処理を完了できます.
with open('a.txt',encoding='utf-8') as f:
    g=[{'name':i.split()[0],'price':float(i.split()[1]),'count':int(i.split()[2])} for i in f if float(i.split()[1]) > 1000]
    print(g)

出力結果:[{'name':'c','price':5000.0,'count':2},{'name':'d','price':1000000,'count':3}]