2017-09-05 111 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) 

香港專業教育學院試圖執行使用集以及刪除重複的一種手段,但產量不想要的結果。當鍵入 「W1,W2,W3,W4」 的輸出就......

sorted_list = sorted(set(l4)) <- set code 

[' ', '(', ')', '1', '2', '3', '4', '[', ']', 'w'] 
[' ', '(', ')', '1', '2', '3', '4', '[', ']', 'w'] 
[' ', '(', ')', '1', '2', '3', '4', '[', ']', 'w'] 
[' ', '(', ')', '1', '2', '3', '4', '[', ']', 'w'] 

誰能幫幫忙?

回答

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))

如果你得到一個單詞列表從Tkinter的在entries回來,因爲你的代碼似乎在暗示,你甚至都不需要一步有關的順序1.

注意排列護理元素。有4! = 24個排序四個獨特元素的方法,所以你應該在你的輸出中預期24個排列。如果這超出了你的預期,也許你正在考慮錯誤的組合函數。