pythonのリスト解析
3449 ワード
1.紹介
リスト解析は反復プロトコルを最もよく適用する環境の1つであり,forループとともに使用される.まず簡単な例を見てみましょう.
技術的に言えば、リスト解析は本当に必要ではありません.なぜなら、forループで結果を表すリストを手動で構築することができるからです.しかし、リスト解析の作成はより簡素化され、実行速度はより速く(2倍速い).
2.ファイル上でのリスト解析の使用
3.拡張リスト解析構文
非常に有用な拡張:式のネストされたforループには、テストが真ではない結果アイテムをフィルタするために関連するif句があります.
x+y接続のリストを構築
4.リスト解析と行列(多次元配列とも呼ばれる)
多次元マトリクスの作成(行列値の位置に注意):
一般的な操作:
5.集合解析と辞書解析
リスト解析は反復プロトコルを最もよく適用する環境の1つであり,forループとともに使用される.まず簡単な例を見てみましょう.
#for
L=[1,2,3,4,5]
for i in range(len(L)):
L[i]+=10 #result:L=[11,12,13,14,15]
#
#
L=[1,2,3,4,5]
L=[x+10 for x in L] #result:[11,12,13,14,15]
技術的に言えば、リスト解析は本当に必要ではありません.なぜなら、forループで結果を表すリストを手動で構築することができるからです.しかし、リスト解析の作成はより簡素化され、実行速度はより速く(2倍速い).
2.ファイル上でのリスト解析の使用
f=open('salary.txt')
lines=f.readlines()
print(lines)
#result:['lastName hoursWorked hourlyWage
', 'Bob 4 80
', 'Ann 8 160
']
# (
)
#rstrip : , line[:-1]
lines=[line.rstrip() for line in lines]
print(lines)
#result:['lastName hoursWorked hourlyWage', 'Bob 4 80', 'Ann 8 160']
3.拡張リスト解析構文
非常に有用な拡張:式のネストされたforループには、テストが真ではない結果アイテムをフィルタするために関連するif句があります.
# 1~9
# 1: +if
even=[x**3 for x in range(1,10) if x%2==0]
print(even) #result: [8, 64, 216, 512]
# 2: +filter+lambda
even=list(filter((lambda x:x%2==0),[x**3 for x in range(1,10)]))
print(even) #result: [8, 64, 216, 512]
# 3:map+filter+lambda ( map ,map for 2 )
even=list(filter(lambda x:x%2==0,map((lambda x:x**3),range(1,10))))
print(even) #result: [8, 64, 216, 512]
x+y接続のリストを構築
# x y
lst=[x+y for x in 'abc' for y in 'lmn']
print(lst) #result:['al', 'am', 'an', 'bl', 'bm', 'bn', 'cl', 'cm', 'cn']
4.リスト解析と行列(多次元配列とも呼ばれる)
多次元マトリクスの作成(行列値の位置に注意):
# row col , row col
row=5
col=6
# 1:
arr1=[[0 for c in range(col)] for r in range(row)]
# 2: !!! ,
arr2=[[0]*col]*row
# 3:numpy zeros ,dtype float64, ,
import numpy as np
arr3=np.zeros((row,col),dtype=int)
一般的な操作:
M=[[1,2,3],
[4,5,6],
[7,8,9]]
N=[[2,2,2],
[3,3,3],
[4,4,4]]
#
M[1] #return:[4,5,6]
# , row , , ,
# 1: :row=[1,2,3]; :row=[4,5,6]; :row=[7,8,9]
[row[1] for row in M] #return:[2,5,8]
# 2:
[M[row][1] for row in range(3)] #return:[2,5,8]
# ( )
[M[i][i] for i in range(len(M))] #return:[1, 5, 9]
# , col row
[M[row][col]*N[row][col] for row in range(3) for col in range(3)]
#return:[2, 4, 6, 12, 15, 18, 28, 32, 36]
[[M[row][col]*N[row][col] for col in range(3)] for row in range(3)]
#return:[[2, 4, 6], [12, 15, 18], [28, 32, 36]]
5.集合解析と辞書解析
#
{x*x for x in range(10)} #result:{0, 1, 4, 9, 16, 25, 36, 49, 64, 81}
# :
set(x*x for x in range(10)) #result:{0, 1, 4, 9, 16, 25, 36, 49, 64, 81}
#
{x*x for x in range(10) if x%2==0} #result:{0, 4, 16, 36, 64}
# : (12) , 12
{x*y for x in [1,2,3] for y in [4,5,6]} #result:{4, 5, 6, 8, 10, 12, 15, 18}
#
{x:x*x for x in range(10)}
#result:{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
# :
dict((x,x*x) for x in range(10))
#result:{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
#
{x:x*x for x in range(10) if x%2==0} #result:{0: 0, 2: 4, 4: 16, 6: 36, 8: 64}
# {1:4,1:5,1:6,2:4,2:5,2:6,3:4,3:5,3:6}, key value,
{x:y for x in [1,2,3] for y in [4,5,6]} #result:{1: 6, 2: 6, 3: 6}