2017-07-05 18 views
0

このコードをより高速に実行することは可能ですか?Pythonコードを高速化する

a,b=map(int,input().split()) 
c=list(map(int,input().split())) 
d=list(map(int,input().split())) 
e=list(map(int,input().split())) 

happy=0 

for i in c: 
    if i in d: 
     happy=happy+1 
    elif i in e: 
     happy=happy-1 

print(happy) 

コードはcリストの要素がd又はeリスト中に存在する場合に応じhappy変数を増減する必要があります。このコードは、c,dおよびeのリストの少数の要素に対して正常に動作します。しかし、多くの要素がある場合、タイムアウトのためにコードの実行が終了します。

これを実行するにはどうすればよいですか?

+1

リストの代わりにセットを使用できます – khelwood

+0

入力を整数に変換する必要はありません。あなたは文字列を比較することができ、結果は変更されません。 –

答えて

3

ループを回避できます。 変数happyは、実質的にdにある要素の数とeにある要素の数の差です。

cに重複がありますか?

あなたは一度だけ同じ要素をカウントしたい場合は、あなたがsetを使用することができ、それは暗黙的に削除重複:

set_c = set(c) 
happy_match = set_c.intersect(d) 
unhappy_match = set_c.intersect(e) 

happy = len(happy) - len(unhappy_match) 

あなたは(重複を含む)の各発生をカウントするようにしたい場合は、あなたが適用することができますリストと同じロジック:

+2

'd'と' e'を直接 'intersection'に渡すことができます。 –