2017-04-15 7 views
0

ここでは、リストから共通項目を印刷するコードとset()を持っています。 結果変数が何を得ているのかわかりません。リストから共通項目を印刷し、set()

import random 
a = random.sample(range(1,30), 12) 
b = random.sample(range(1,30), 16) 
result = [i for i in set(a) if i in b] 

以下の行の意味は?私はプログラミングに新しいことを説明してください。

[i for i in set(a) if i in b] 
+0

共通項目を印刷します。私は問題を参照してください –

答えて

0

最後の行は、リスト内包でabの値の間の交差点を行います。プール実行のみ:

まず、asetに変換する理由がわかりません。整数のサンプリングrangeは、常に異なる値を提供します。その場合、それは処理速度を上げることはありません、それは単に順序で混乱します(すでにランダムです...)。なぜならリニアサーチの(唯一のいくつかの値がある場合に顕著ではありません)

その後、if i in bは非効率的である(bがあることlist

私はこのようにそれを書き直したい:

a = random.sample(range(1,30), 12) 
b = set(random.sample(range(1,30), 16)) 
result = [i for i in a if i in b] 

またはsetintersectionメソッドを使用するとさらに優れています。両方の書き換えで

result = set(random.sample(range(1,30), 12)).intersection(random.sample(range(1,30), 16)) 

、我々は他の反復可能で高速検索/交差点を使用できるようにするために、1 setを作成します。

0

これは、リストの理解と呼ばれ、基本的に配列内の規則的なループや辞書を実行します。初心者のPythonプログラマのための

多くの読み取り可能なコードは次のようになります。

results = [] 
for i in set(a): 
    if i in b: 
     results.append(i) 

あなたはlist(a)に見て、唯一list(a)list(b)の両方にいる人たちを維持しています。

+0

多くの可読性?それはそれを書くもう一つの方法です。 list comprehension _is_ readable。 –

+0

は初心者のために読むことができ、Pythonの構文に精通している人のためのものではありません。 –

+0

リストの理解は古典的なループ構造よりはるかに高速です。人々に教えることが良い。 –

関連する問題