我有两个清单:
一个-dictionary
,它包含诸如["impeccable", "obvious", "fantastic", "evident"]
之类的关键字作为列表元素
b-sentences
,其中包含["I am impeccable", "you are fantastic", "that is obvious", "that is evident"]
等句子
目标是使用dictionary
列表作为引用。在
过程如下:
sentences
列表获取一个元素,并对dictionary
列表中的每个元素运行它。如果有任何一个元素存在,那么把这个句子放到一个新的列表中sentences
列表中的每个元素重复步骤1。在任何帮助都将不胜感激。在
谢谢。在
代码如下:
sentences = "The book was awesome and envious","splendid job done by those guys", "that was an amazing sale"
dictionary = "awesome","amazing", "fantastic","envious"
##Find Matches
for match in dictionary:
if any(match in value for value in sentences):
print match
现在,您已经修复了原始问题,并修复了执行反向检查的下一个问题,并重命名了所有变量,现在您得到了:
你的问题是:
嗯,是的,你的
match
是一个字典项,这就是你要打印的内容,所以你得到的当然是这个。在如果要打印包含字典项的句子,就不能使用^{} ,因为如果有元素为真,那么该函数的全部意义就是返回True。它不会告诉你是哪一个事实上,如果不止一个,它会在第一个停止。在
如果您不了解
any
之类的函数以及传递给它们的生成器表达式,那么就不应该将它们用作神奇的调用。弄清楚如何将它们写成显式循环,这样您就可以轻松地回答这些问题了。(请注意,any
文档直接向您展示了如何编写等效循环。)例如,现有代码相当于:
^{pr2}$这样写,应该很明显如何修复它。首先,您希望打印句子而不是单词,所以打印},而不是像
value
而不是match
(同样,如果您使用有意义的变量名,如sentence
和{value
这样的无意义的名称和match
这样的误导性名称,这将非常有帮助。其次,要打印所有匹配的句子,而不仅仅是第一个句子,所以不要break
。所以:如果你回到我的第一个答案,你可能会注意到这正是我建议的结构。在
您可以通过使用理解和迭代器函数来简化或缩短这一过程,但除非您理解了简单版本,以及这些理解和迭代器函数是如何工作的。在
首先,将算法转换为psuedocode,而不是像下面这样的模糊描述:
要转换成Python,这些步骤中唯一一个不是很简单的步骤就是“将句子吐出到一个新列表中”。为此,在开始之前,您需要有一个新的列表,比如
a_new_list = []
,然后您可以对它调用append
。在一旦你把它转换成Python,你会发现“我是无懈可击和奇妙的”会被吐出两次。如果你不想这样,你需要找到合适的“请”来打破内部循环,继续下一句话。转换为Python也很简单。在
现在你已经发布了你的代码…我不知道你问的是什么问题,但至少有一点很明显有问题。在
sentences
是一个句子列表。在所以,
for partial in sentences
表示每个partial
都是一个句子,就像"I am impeccable"
。在dictionary
是一个单词列表。所以,for value in dictionary
表示每个value
都是一个单词,就像"impeccable"
。在现在,您正在检查
partial in value
中每个部分的每个值。那永远不会是真的。"I am impeccable"
不在"impeccable"
中。在如果你把它转过来,检查一下
value in partial
,它会给你一些至少有时是真的,甚至可能是你真正想要的,但我不确定。在另外,如果您为变量使用更好的名称,这将更加明显。},很明显,{}永远不会是真的,
partial
和value
不要告诉你这些东西到底是什么;如果你把它们叫做sentence
和{word in sentence
可能就是你想要的。在另外,查看中间值确实有助于调试类似的东西。当您使用显式的
for
语句时,您可以print(partial)
查看partial
包含的每一个内容,或者在调试器中放置断点,或者在类似于this one的可视化工具中单步执行。如果必须将any(genexpr)
拆分为显式循环来执行此操作,请执行此操作。(如果您不知道如何操作,那么您可能不了解生成器表达式或any
函数的作用,只是复制和粘贴了您不理解的随机代码,并尝试更改随机的东西,直到它起作用……在这种情况下,您应该停止这样做,并了解它们的实际含义。)相关问题 更多 >
编程相关推荐