Python问题从列表中删除重复项

时间:2017-09-05 20:23:39

标签: python python-3.x tkinter

我在删除输出中的所有重复项时遇到问题。目前使用Tkinter接收用户输入...在4个不同的文本框中是4个单词。目标是打印出所有单词的排列。

  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 个答案:

答案 0 :(得分: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))
  5. 如果您在entries中收到来自tkinter的单词列表,正如您的代码似乎建议的那样,您甚至不需要第1步。

    请注意排列关心元素的顺序。有4个! = 24种排序四种独特元素的方法,因此您应该在输出中预期24种排列。如果这超出了你的预期,也许你会想到错误的组合功能。