from itertools import product
ttext = 'hello how are you?'
list1 = ['abra', 'hello', 'cfre']
list2 = ['dacc', 'ex', 'you', 'fboaf']
list3 = ['ihhio', 'oih', 'oihoihoo']
l = [list1, list2, list3]
所以我有上面的列表,我需要知道列表中只有一个单词是否在ttext中(只有一个)
我想要什么:例如,如果在ttext中我有“你好我的名字是brian”它会说“确定只有一个单词”但是如果我在ttext中有多个单词,那么'错误'。 ..
这里检查了所有单词是否都在ttext中,我怎样才能检查ttext中是否只有一个单词的所有单词
for words in product(*l):
print(words, all(word in ttext for word in words))
(('abra', 'dacc', 'ihhio'), False)
(('abra', 'dacc', 'oih'), False)
(('abra', 'dacc', 'oihoihoo'), False)
(('abra', 'ex', 'ihhio'), False)
(('abra', 'ex', 'oih'), False)
(('abra', 'ex', 'oihoihoo'), False)
(('abra', 'you', 'ihhio'), False)
(('abra', 'you', 'oih'), False)
(('abra', 'you', 'oihoihoo'), False)
(('abra', 'fboaf', 'ihhio'), False)
(('abra', 'fboaf', 'oih'), False)
(('abra', 'fboaf', 'oihoihoo'), False)
(('hello', 'dacc', 'ihhio'), False)
(('hello', 'dacc', 'oih'), False)
(('hello', 'dacc', 'oihoihoo'), False)
(('hello', 'ex', 'ihhio'), False)
(('hello', 'ex', 'oih'), False)
(('hello', 'ex', 'oihoihoo'), False)
(('hello', 'you', 'ihhio'), False)
(('hello', 'you', 'oih'), False)
(('hello', 'you', 'oihoihoo'), False)
(('hello', 'fboaf', 'ihhio'), False)
(('hello', 'fboaf', 'oih'), False)
(('hello', 'fboaf', 'oihoihoo'), False)
(('cfre', 'dacc', 'ihhio'), False)
(('cfre', 'dacc', 'oih'), False)
(('cfre', 'dacc', 'oihoihoo'), False)
(('cfre', 'ex', 'ihhio'), False)
(('cfre', 'ex', 'oih'), False)
(('cfre', 'ex', 'oihoihoo'), False)
(('cfre', 'you', 'ihhio'), False)
(('cfre', 'you', 'oih'), False)
(('cfre', 'you', 'oihoihoo'), False)
(('cfre', 'fboaf', 'ihhio'), False)
(('cfre', 'fboaf', 'oih'), False)
(('cfre', 'fboaf', 'oihoihoo'), False)
编辑: 如果列表中只有一个单词在ttext中:if ttext ='hello my name is brian'那么'ok'只有一个单词'hello'列出了ttext' 但是,如果我'你好,你好'我'你好'和'你'那么'不行'列表中的两个字是't / p>
答案 0 :(得分:0)
好的,我想我们终于到了那里:
from itertools import product, chain
from string import punctuation
list1 = ['abra', 'hello', 'cfre']
list2 = ['dacc', 'ex', 'you', 'fboaf']
list3 = ['ihhio', 'oih', 'oihoihoo']
l = [list1, list2, list3]
def test(l, tt):
counts = {word.strip(punctuation):0 for word in tt.split()}
for word in chain(*product(*l)):
if word in counts:
counts[word] += 1
if sum(v > 1 for v in counts.values()) > 1:
return False
return True
输出:
In [16]: ttext = 'hello my name is brian'
In [17]: test(l,ttext)
Out[17]: True
In [18]: ttext = 'hello how are you?'
In [19]: test(l,ttext)
Out[19]: False
答案 1 :(得分:-1)
不确定你想在这里实现什么,但你可以尝试这样的事情:
for words in product(*l):
print(words, len(word for word in words if word in ttext) == 1)
答案 2 :(得分:-1)
for list in l:
if 'hello' in list:
print(list, 'this one got hello in it')
或者可能不是全部使用任何
print(words, any(word in ttext for word in words))
答案 3 :(得分:-1)
Python将两个布尔值的总和视为1和0。这意味着您可以通过添加列表中的所有值并检查是否为1来检查列表中的一个真值。以下函数将检查布尔值列表中是否存在x个true值:
def xNumberAreTrue(booleans, x):
return sum(booleans) == x
在您的情况下,此功能可以按如下方式使用:
for words in product(*l):
print(words, xNumberAreTrue([word in ttext for word in words], 1))
word in ttext
评估为true
或false
。