前提・実現したいこと
6桁の1と0のフラグがあって、そのフラグを返却する関数を作成しています。
・フラグが「101100」の場合→関数からの戻り値は「101100」
・フラグが「210110」の場合→関数からの戻り値は「110110」と「0110110」
関数に2が渡された場合はその2を「1」と「0」に置きかえて返すものです。
ひとまず機能は何とか実現できたのですが、ループで処理しているのでフラグが「222222」の様に
すべて「2」で指定された場合の処理時間がかかってしまうため実用に耐えません。
改善策を色々と調べてみましたがこれというアイデアがないため困っております。
どうかお知恵を拝借できますでしょうか。
該当のソースコード
現在のやり方は
1.渡された6桁のフラグを2桁ずつに分解する。
2.2桁に分けたフラグを判定させて新たなフラグを生成する。
例:「22」→「00,10,11,01」
もとのフラグが10の場合は10のままとする。
3.3つに分解したフラグを結合する。
4.付加キーを付加する。
python
1def make_search_key(companycode,searchkey): 2 try: 3 result=[] 4 wh='2' 5 afk=[] 6 sm='' 7 sb='' 8 if searchkey: 9 sf=searchkey[:6] 10 #桁ずれ処理 11 if searchkey[6:9] == '100': 12 sm=searchkey[6:9] 13 sb=searchkey[9:10] 14 else: 15 sm=searchkey[6:8] 16 sb=searchkey[8:10] 17 mf = wh in sf 18 addkey = ['0','1','01','11','001','011','101','111'] 19 if mf: 20 kv1=[] 21 kv2=[] 22 kv3=[] 23 #先頭2桁 24 s1=sf[0:2] 25 if s1 == '02': 26 kv1=['00','01'] 27 elif s1 == '12': 28 kv1=['10','11'] 29 elif s1 == '20': 30 kv1=['00','10'] 31 elif s1 == '21': 32 kv1=['01','11'] 33 elif s1 == '22': 34 kv1=['00','01','10','11'] 35 else: 36 kv1=[s1] 37 #中間2桁 38 s2=sf[2:4] 39 if s2 == '02': 40 kv2=['00','01'] 41 elif s2 == '12': 42 kv2=['10','11'] 43 elif s2 == '20': 44 kv2=['00','10'] 45 elif s2 == '21': 46 kv2=['01','11'] 47 elif s2 == '22': 48 kv2=['00','01','10','11'] 49 else: 50 kv2=[s2] 51 #後ろ2桁 52 s3=sf[4:6] 53 if s3 == '02': 54 kv3=['00','01'] 55 elif s3 == '12': 56 kv3=['10','11'] 57 elif s3 == '20': 58 kv3=['00','10'] 59 elif s3 == '21': 60 kv3=['01','11'] 61 elif s3 == '22': 62 kv3=['00','01','10','11'] 63 else: 64 kv3=[s3] 65 66 print("s1:{0}".format(kv1)) 67 print("s2:{0}".format(kv2)) 68 print("s3:{0}".format(kv3)) 69 70 start = time.time() 71 72 afk=[ i+j+k for i in kv1 for j in kv2 for k in kv3 ] 73 74 elapsed_time = time.time() - start 75 print ("elapsed_time:{0}".format(elapsed_time) + "[sec]") 76 77 if afk: 78 result = [ i+sm+j for i in afk for j in addkey ] 79 return result 80 except Exception as e: 81 print(e) 82 raise e 83
試したこと
処理速度(できれば1秒程度に短縮させたい。)
・3つのうち1つだけに2が1つだけ指定された場合→3秒程度
・3つともに2が1つだけ入っている場合→10秒程度
・全体に2が指定された場合→30秒程度
6桁を合体させた状態でループを減らす様にしてみましたが、やはり「222222」で32パターン程の
フラグを生成することとなり、付加キーを付け加える箇所でパフォーマンスが劣化していました。
そのため速度は改善できませんでした。
CPUの性能を上げれば多少は改善するかと思ってLambdaのスペックを128MBから256MBにしてみたりも
しましたが速度改善はありませんでした。
補足情報(FW/ツールのバージョンなど)
AWS/Lambda
python3.7
回答3件
あなたの回答
tips
プレビュー