Python中的Lambda表达式无法正常工作

Python中的Lambda表达式无法正常工作,python,lambda,Python,Lambda,我试着做一些lambda表达式。没有任何错误。但它不能正常工作。下面是我的代码 from nltk.tokenize import word_tokenize list1 = 'gain, archive, win, success'.split(',') list2 = 'miss, loss, gone, give up'.split(',') def classify(s, rls): for (f, emotion) in rls: if f(s): return em

我试着做一些lambda表达式。没有任何错误。但它不能正常工作。下面是我的代码

from nltk.tokenize import word_tokenize

list1 = 'gain, archive, win, success'.split(',')
list2 = 'miss, loss, gone, give up'.split(',')

def classify(s, rls):
for (f, emotion) in rls:
  if f(s):
     return emotion
return "another"

rules = [(lambda x: (i for i, j in zip(word_tokenize(x),list2) if i == j) != [], "sad"),
         (lambda x: (a for a, b in zip(word_tokenize(x),list1) if a == b) != [], "happy"),]

print classify("I win the game", rules)
print classify("I miss you", rules)
输出是

sad
sad

我不知道我的代码出了什么问题。谁能帮帮我

Zip并行遍历列表,因此它返回一个元组列表,其中第i个元组包含来自每个参数序列或iterables的第i个元素。返回的列表的长度被截断为最短参数序列的长度

所以你试着检查句子的第i个单词是否与第i个情感词匹配,我猜这不是你想要的。另外,正如@juanpa.arrivillaga所指出的,您正在检查生成器是否等于空列表,这总是正确的,原因很简单,生成器不是列表,独立于其内容。 你要做的是检查句子中是否有单词在情感列表中

尝试更改:

lambda x: (i for i, j in zip(word_tokenize(x),list2) if i == j) != []
致:

因此,总体而言,您定义如下规则:

rules = [(lambda x: any(word in list2 for word in word_tokenize(x)), "sad"),
         (lambda x: any(word in list1 for word in word_tokenize(x)), "happy")]
此外,情感列表中的单词中存在空格,这可能导致比较失败。 重新定义如下:

list1 = 'gain,archive,win,success'.split(',')
list2 = 'miss,loss,gone,give up'.split(',')

或者更好地使用删除单词开头和结尾的空格,作为处理字符串时的一般良好做法。

寻求调试帮助的问题此代码为什么不起作用?必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅。我们还需要单词_tokenize函数定义。首先,更正代码缩进!!是的,你的代码中有很多错误。你的lambda函数总是返回True,一方面。。。还有,我不确定你想要的是拉链。但你需要具体说明。但当然,要知道,如果i==j!=[]始终为真,因为生成器从不等于空列表。他们当前正在检查某个生成器是否不等于空列表,这始终为真是我想检查句子中是否有单词在情感列表中。我试着从你的方式。但是,另外一个是我做的。现在输出是happy,happy。在第二条规则中,您应该将list2更改为list1。我报告的只是第一个例子。这是定义lambda表达式的正确方法吗?实际上,这是我第一次使用lambda表达式。请帮帮我,
list1 = 'gain,archive,win,success'.split(',')
list2 = 'miss,loss,gone,give up'.split(',')