2017-11-10 20 views
0

私は、任意の数の項目を含む任意の数のリストを取る単純なスクリプトを持っています。Python 3:リスト内の文字列を比較するために

def lists(*usrin): 

# STRINGS IN MULTIPLE LISTS 
repeat_strings = set() 
for a, b in itertools.combinations(usrin, 2): 
    repeat_strings.update(set(a).intersection(b)) 
    print(', ' .join(repeat_strings)) 

ユーザーとして、私は、次の引数の関数を渡す場合:

lists(['g', 'gh', 'ghj', 'g'], ['j', 'ju', 'gh', 'gk', 'gn'], ['gn']) 
私は複数のリストに表示されますこれらのリストと表示値以上の反復を取得する必要があり、ここで私がこれまで持っているものです

私が得ることを期待する:出力として

gn, gh 

、しかし私が手:

gh 
gh 
gn, gh 

最初の2つの「gh」がどこから来ているのか分かりません。

私は、関数呼び出しは次のようになりながら、に別のリストを追加した場合:

lists(['g', 'gh', 'ghj', 'g'], ['j', 'ju', 'gh', 'gk', 'gn'], ['gn'], ['g', 'gk']) 

私が得ることを期待する:

g, gn, gk, gh 

をしかし、その代わり得る:

gh 
gh 
g, gh 
g, gn, gh 
g, gn, gk, gh 
g, gn, gk, gh 

私は私が作ったforループを誤解していると思います。私が間違っていることを誰かが説明できますか?

答えて

0

printステートメントは表示されるディスプレイの責任を負います。これはループごとに実行されるので、ステップごとにリストの構築を表します。それ以外の場合、アルゴリズムは正しいです。これを試して中間印刷を避けてください:

def lists(*usrin): 

    # STRINGS IN MULTIPLE LISTS 
    repeat_strings = set() 
    for a, b in itertools.combinations(usrin, 2): 
     repeat_strings.update(set(a).intersection(b)) 
    print(', ' .join(repeat_strings)) 
+1

私はそれに気づかなかったと信じられません。時にはもう一組の目が必要な場合もあります。ありがとうございました! –

+0

問題に直面したときには、あなたのテディベア/マウス/ペン/同僚/誰かにそれを説明するようにしてください。あなたがそれを詳細に説明するのに十分なほど愚かで、一般的には説明の途中で、 :) –

関連する問題