【发布时间】:2020-03-08 08:28:52
【问题描述】:
我有一个字符列表如下:
letters = "THISORTHAT"
我有一个包含大量单词的列表,即
dictionary_list = ['AIR', 'AIRS', .. 'TOAST', .. ]
我正在尝试创建一个列表,其中包含可以从字母 [] 中的字符创建的 dictionary_list 中的所有单词。这里的关键是,一旦我使用了一个字符,就必须删除它,即我不能使用 letters[] 中的字符两次。例如,“AIR”这个词很好,但“ARTHRITIS”这个词不好,因为“R”被使用了两次,“R”在字母[]和“I”中只出现一次。
我的计划是将 letters[] 划分为一个新列表,其中每个字符都是一个新元素,然后在 for 循环下对 dictionary_list[] 中的每个单词执行相同的操作。然后,我想出了以下代码。换句话说,它遍历 dictionary_list 中的每个单词,如果在 letters[] 中找到该单词的第一个字母,那么我从 letters[] 中删除该字符并重复该单词的其余部分。如果在任何时候都没有在 letters[] 中找到该字母,则意味着无法创建该单词,因此外部循环转到下一个单词。如果可以创建单词,则将其附加到存储中。
from collections import Counter #for Counter function
letters = 'THISORTHAT'
def split(y):
return [x for x in y]
storage = [] #where my list of words will go
flag = 1
for i in dictionary_list:
letters_split = split(letters)
word = (Counter(i)).keys()
for j in word:
if j in letters_split:
letters_split.remove(j)
flag = 1
continue
else:
flag = 0
break
if flag == 1:
storage.append(i)
结果列表 storage[] 包含诸如“ARTHRITIS”之类的词,根据我上面的问题,这是不正确的。似乎代码一旦循环通过它就不会删除字符,因此只要给定的单词包含相同的字符,即使每个单词都有更多,它也会被附加到我的最终表格中。我在我的逻辑中找不到错误。有没有人有任何提示?谢谢你
【问题讨论】:
-
Counter.keys将只包含每个字母一次。为什么不取letters的Counter和每个字典单词并比较每个计数器字典中的项目?
标签: python