Python」カテゴリーアーカイブ

Advance(8/8) reduce

reduce() : 畳み込み、関数型言語、高階関数
   from fanctiontools import reduce #python3以降
reduce ( 関数 , イテオブ {{ ,initializer }} )

 from functiontools import reduce
 from operater import add
 from operater import mul
 lst_1 = [ 10 , 1 , 2 , 3 , 4 ]
 print ( reduce( add , lst_1 ) )
 # 20
 print ( reduce( mul , lst_1) )
 # 240
 

※ add のとき 10+1+2+3+4=20
※ mulのとき 10x1x2x3x4 = 240

Advance(7/8) filter

     filter() : イテラブルの要素を抽出・削除
         filter( 処理 , イテオブ )

 lst_1 = [ -2,-1,0,1,2 ]
 X = filter( lambda x : x % 2 == 0 , lst_1 )
 print ( X )
 # < filter object at .... > 
 print ( type ( X ))
 # < class 'filter' >
 for i in filter( lambda x : x % 2 == 0 , lst_1 )
     print ( i )
 # -2
 # 0
 # 2

※ filter() は、第1引数の処理結果が True(noneもTrue判定)される要素を抽出

<==> False を抽出 (( itertools.filterfalse() ))

※ 処理(== None)以外の場合は、ジェネレータ式と同等
( item for item in iterable if fanction(item) )
因みに、処理(== None)の場合 ( item for item in iterable if item ) と同等

Advance(6/8) map

map() : イテラブルオブジェクトの要素に処理実行

map( 処理 , イテオブ )

 lst_1 = [ -1,2,-3 ]
 map_lst = map( abs , lst_1 )
 print (map_lst)
 # < map object at ・・・ >
 print (type(map_lst))
 # < class 'map' >
 # 中身を見るには、for でまわす
 for i in map(abs,lst_1):
     print ( i )
# 1
# 2
# 3

lambda を使って
map ( lambda , イテオブ)

 lam_map_lst = list(map(lambda x:x*2,lst_1))
 print( lam_map_lst )
 # [-2, 4 , -6]

def を使って
map ( def , イテオブ)

 def add3(x):
    return x + 3
 print ( list( map( add3 , lst_1 ) ) )
 # [2,5,-1]

Advance(5/8) enumerate

 enumerate() インデックス番号と要素の取得 

( 番号 , 要素 ) for 変数(番号),変数(要素) in enumerate(イテオブ)

 lst_1 = ['みかん' , 'リンゴ' , 'ばなな']
enu_lst = [( i , k ) for i , k in eumerate( lst_1 )]
print( enu_lst )
# [( 0 , 'みかん') , ( 1 , 'リンゴ') , ( 2, 'ばなな')]

Advance(4/8) zip

zip () 複数リストから forループ で要素を取得

( 要素1,要素2,..) for 要素1,要素2,.. in zip( イテオブ121 , イテオブ2,.. )

 lst_1 = [ 1,2,3 ]
 lst_2 = [ 10,20,30 ]
 zip_lst = [( k1,k2 ) for k1,k2 in zip( lst_1 , lst_2 )]
 print( zip_lst )
 #[ ( 1,10 ) , ( 2,20 ) , ( 3,30 ) ]

Advance(3/8) List comprehensions

リスト内包表記
  [ 式 for 任意変数 in イテラブルオブジェクト1 ]

 lst = [0,1,2,3,4,5,6,7,8,9]
 lst2 = [i*2 for i in lst]
 print(lst2) 
 #[0,2,4,6,8,10,12,14,16,18]

条件分岐 if
[ 式 for 任意変数 in イテラブルオブジェクト if 条件式 ]

 odd = [ i for i in lst if i % 2 == 1 ]
 print ( odd ) 
 #[1,3,5,7,9]

三項演算子 ( 条件式 )
[ 真値 if 条件式 偽値 for 任意変数 in イテラブルオブジェクト ]

 odd_even = [ 'odd' if  i % 2 == 1 else 'even' for i in lst ]
 print( odd_even )
 #['even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd']
  1. ※iteratorObject:順番に要素を取得できるObject ↩︎

Advance(2/8) Conditinal Expressions

三項演算子(さんこうえんざんし)

条件が「真」のとき評価される式(値) if  条件 else 条件が「偽」のとき評価される式(値)

a=1
Ans = a*2 if a%2==0 else a*3
print (Ans) #3

> and (かつ), or(もしくは) による条件追加

「真」 if 条件A and 条件B else 「偽」

「真」 if 条件A or 条件B else 「偽」

a = -2
Ans = '負数かつ偶数' if a<0 and a%2==0 else '正数かつ奇数'
print (Ans) #負数かつ偶数

> if 追記によるネスト(選択追加)

「真①」 if 条件Ⅰ else 「真②」 if 条件Ⅱ else 「真③」 if 条件Ⅲ ・・・ else 「偽」

a = 2
Ans = 'NG1' if a>100 else 'NG2' if a<0 else 'NG3' if a%2==1 else 'OK' 
print (Ans) #OK
[条件ⅠOK→真1評価、左記NG→条件ⅡOK→真2評価、左記NG→条件ⅢOK→真3評価、左記NG→ ・・・全NGは 偽 評価]

※[else] で区切って判断すると分かりやすい

Advance(1/8) lambda

● lambda (無名関数:defの様に名前を付けない)

lambda arg1,arg2,… : 式

add_lambda = lambda a , b = 1 : a + b

def Name ( arg1 , arg2,… ) :
return 式
  ⇩

def add_def ( a , b = 1 ):
return a + b
print(add_lambda(5,4))    #9
print(add_def(5,4))    #9