【问题标题】:Finding possible words from list of characters without using character twice从字符列表中查找可能的单词而不使用字符两次
【发布时间】: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 将只包含每个字母一次。为什么不取lettersCounter 和每个字典单词并比较每个计数器字典中的项目?

标签: python


【解决方案1】:

通过在单词上使用Counter 函数然后在其上调用.keys(),您已经使word 变量成为单词中唯一字符的集合。这不是你想要的。您可以按原样遍历单词。

您还可以使用 for-else 结构进一步缩短代码

https://book.pythontips.com/en/latest/for_-_else.html

letters = 'THISORTHAT'
storage = [] 
for i in dictionary_list:
    letters_split = list(letters) #This does the same thing as your split function
    for j in i:
        if j in letters_split:
            letters_split.remove(j)
        else:
            break
    else:
        storage.append(i)

【讨论】:

  • 啊,这行得通!谢谢你。我不知道您可以遍历字符串中的字符,我认为您必须将其转换为字符列表。谢谢!
【解决方案2】:

这是一个动态规划问题,您应该记住以前的结果并根据标准成功/失败进行修剪

我不确定我是否完全理解。结果单词中的字母顺序可以与输入列表中的字母顺序不同吗?

Inputchars = “ti”

一个有效的单词可以倒序吗

“It”

如果不需要保留字符顺序并假设短文本,我将置换列表并解决断字问题,同时考虑访问的字符(最后丢弃无效结果)

【讨论】:

    猜你喜欢
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多