2017-09-05 14 views
-2

出力からすべての重複を削除する際に問題があります。現在、Tkinterを使用してユーザー入力を受け取ります... 4つの異なるテキストボックスで4つの単語になります。目標は単語のすべての順列をプリントアウトすることです。Pythonの問題リストから重複を削除する

def exactMatch(entries): 
    for entry in entries: 
    words = [entry[1].get() for entry in entries] 
    perms = [p for p in permutations((words))] 

    l1 = [] 
    for words in perms: 
    #perms2 = ','.join(str(v) for v in perms) 

    l1.append(perms) 

    l2 = ','.join([str(l1) for word in l1]) 


    l3 = l2.replace("," , ' ') #Takes out the Quotations 
    l4 = l3.replace("'" , ' ') # Takes out the commas 

    sorted_list = sorted(set(l4)) 

    #unique_list = list(OrderedDict(zip(l4, repeat(None)))) 
    #for i in l4: 
     # if i not in l5: 
     # l5.append(i) 

    print(sorted_list) 

出力...我々は入力し4つのワードから順列を取得しようとすると、以下の通りです(出力/何の重複を示さないPSだけ抜粋)問題は、多くの重複を印刷し、大規模に生産されていることです出力。

(hi w2 w4 w3) (hi w3 w2 w4) (hi w3 w4 w2) (hi w4 w2 w3) (hi w4 w3 w2) (w2 hi w3 w4) (w2 hi w4 w3) (w2 w3 hi w4) (w2 w3 w4 hi) 

Iveは、セットの使用と重複を削除する手段を実装しようとしましたが、出力は意図したものではありません。 「w1、w2、w3、w4」と入力すると、出力は次のようになります。

助けてもらえますか?

答えて

1

これは、必要以上に複雑になり、プロセスにエラーが発生するようです。あなたのコードの構造は非常に混乱しており、同じことを何度もやっているようです。

あなたが言うように、あなたの入力が本当にin = "w1,w2,w3,w4"であれば、私たちすることができます,上だけ

  1. スプリット:words = in.split(',')、リスト['w1', 'w2', 'w3', 'w4']になります。
  2. setに単語を入れて重複を削除します:words = set(words)
  3. 順列を得るperms = itertools.permutations(words)
  4. 並べ替えを印刷print(list(perms))

あなたが戻ってentriesでのTkinterから単語のリストを取得する場合、あなたのコードが示唆するように見えるように、あなたもの順序について、ステップ1

なお順列ケアを必要としません。要素。 4つがあります! = 4つの固有の要素を順序付ける方法は24通りなので、出力には24の置換が必要です。これがあなたが予想していた以上のものであれば、間違った組み合わせ機能を考えているかもしれません。

関連する問題