使用列表中的任何值进行逻辑检查?

时间:2011-08-05 05:12:39

标签: python list logic if-statement

list = ["apples", "oranges", "jerky", "tofu"]

if "chew" in action and list[:] in action:
    print "Yum!"
else:
    print "Ew!"

我如何进行逻辑检查以检查“chew”的运行情况以及列表中的任何值?例如,我想打印“百胜!”行动是“咀嚼橙子”还是“咀嚼生涩”。

5 个答案:

答案 0 :(得分:6)

为什么不使用内置any()功能?以下对我来说似乎很恐怖:

foods = ["apples", "oranges", "jerky", "tofu"]

if "chew" in action and any(f in action for f in foods):
    print "Yum!"
else:
    print "Ew!"

当然,只搜索简单的子串可能会产生一些奇怪的结果。例如,"jerkeyblahchew"仍会与"Yum!"类别匹配。您可能希望将action分成单词,并查找紧跟"chew"的食物名称(正如@Peter Lyons在他的答案中建议的那样,前两个单词将是{{ 1}})。

忽略顺序,您可以通过使用以下内容来专注于空格分隔的单词(并进一步忽略大写/小写):

"chew X"

答案 1 :(得分:4)

if "chew" in action and action.split()[1] in list:
    print "Yum!"
else:
    print "Ew!"

答案 2 :(得分:0)

首先,请不要使用list作为变量名。它是python中的关键字


_list = ["apples", "oranges", "jerky", "tofu"]
bools = [True for a in action.split() if a in (_list + ["chew"])]
if True in bools:
    print "Yum!"
else:
    print "Ew!"

答案 3 :(得分:0)

x in y表示"依次查看y的每个元素;是否等于x?"所以逻辑显然不对:list(对于变量名称一个坏主意,BTW,因为那个类型的名称)是一个字符串列表,action是一个string - 字符串的元素是字母,没有字母可以等于字符串列表。

答案 4 :(得分:0)

好像你想在这里进行一些集合操作(​​交集)。

假设action是包含单词的基本字符串:

foods = set(["apples", "oranges", "jerky", "tofu"])
actionWords = set(action.split())

if "chew" in action and foods & actionWords:
    print "Yum!"
else:
    print "Ew!"

集合上的&运算符代表交集,请参阅python doc