我有一组想要排除的单词,并且我想检查输入的每个新单词是否完全包含在另一个单词中。我该怎么做?

问题描述 投票:0回答:1

所以我目前正在制作一个文字游戏,我希望用户不能输入完全包含在另一个单词中的单词(例如“子集”中的“集合”),但是我当前的代码:

noWord = False
for _word in used_words:
    if set(word).issubset(set(_word)):
        noWord = True
if noWord == False:
    # Calculate score for the word

使得字母的顺序无关紧要(例如,播放“pitch”会阻止您播放“chip”),这是我不想要的功能。我该如何有效地做到这一点。

我尝试将 _word 变量作为列表进行搜索,并检查该列表中的每组字母是否与 word 变量匹配,但这效率非常低。 例如

wordAsAList == list(_word)
# All words have to be 3 letters or more in my game
for v in range(len(wordAsAList) - 2):
    for i in range(len(wordAsAList)):
        if len(wordAsAList) - v - 3 >= i:
            if ("".join(wordAsAList[i:(len(wordAsAList) - v)])) == word:
                noWord = True

除此之外,我几乎不知道如何解决问题/使上面的代码更高效。 (我也知道我不应该使用 range(len(list)),但我仍然这样做)

提前致谢:)

python python-3.x list set
1个回答
0
投票

这就是

set
的作用。
set
创建一个
set
(这是一个没有任何顺序的集合,其目的是验证什么属于它,其中包含什么。嗯,集合。就像数学中的那样)。

要构建一个集合,您可以使用另一个事物集合来调用

set
。就像
S=set([3, 1, 2])
是包含数字 1、2 和 3 的集合。那么
set([1,3]).issubset(S)
就是 True,因为集合
{1,3}
包含在集合
{1,2,3}

当您不使用非集合的内容调用

set
时,您会收到错误。
set(1)
引发错误。

现在,在这里,你用字符串调用了

set
。您认为是“原子”值。因此,您可能认为它应该引发错误。但字符串是一个集合:字符的集合。所以
S=set("hello")
实际上是包含
{'h', 'e', 'l', 'o'}
的集合(以任意顺序)。
T=set("lol")
也是一个集合,
{'o','l'}
(我以随机顺序显示它们,因为就像数学一样,没有顺序)。

所以

T.issubset(S)
在这里是真的。因为
T
的所有元素也是
S
的元素。

现在,这就是“为什么”。至于“如何”,很简单:

"set" in "subset"

是真的。

这一次,在您期望的意义上:因为字符串“set”包含在字符串“subset”中。

© www.soinside.com 2019 - 2024. All rights reserved.