我在删除输出中的所有重复项时遇到问题。目前使用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']
任何人都可以帮忙吗?
答案 0 :(得分:1)
看起来事情比必要的事情复杂得多,并导致过程中的错误。您的代码结构非常混乱,您似乎多次执行相同的操作。
如果您的输入确实是in = "w1,w2,w3,w4"
,就像您说的那样,我们可以
,
:words = in.split(',')
,结果列表为['w1', 'w2', 'w3', 'w4']
。set
以删除重复项:words = set(words)
。perms = itertools.permutations(words)
。print(list(perms))
。如果您在entries
中收到来自tkinter的单词列表,正如您的代码似乎建议的那样,您甚至不需要第1步。
请注意排列关心元素的顺序。有4个! = 24种排序四种独特元素的方法,因此您应该在输出中预期24种排列。如果这超出了你的预期,也许你会想到错误的组合功能。