Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用列表中的任何值进行逻辑检查?_Python_List_Logic_If Statement - Fatal编程技术网

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

Python 使用列表中的任何值进行逻辑检查?,python,list,logic,if-statement,Python,List,Logic,If Statement,我如何进行逻辑检查,检查动作中的“咀嚼”以及列表中的任何值?例如,我想打印“Yum!”操作是“chew oranges”还是“chew Jecky”。首先,请不要将列表用作变量名。这是python中的一个关键字 if "chew" in action and action.split()[1] in list: print "Yum!" else: print "Ew!" 为什么不使用内置功能?以下内容在我看来相当像蟒蛇: _list = ["apples", "orange

我如何进行逻辑检查,检查动作中的“咀嚼”以及列表中的任何值?例如,我想打印“Yum!”操作是“chew oranges”还是“chew Jecky”。

首先,请不要将列表用作变量名。这是python中的一个关键字

if "chew" in action and action.split()[1] in list:
    print "Yum!"
else:
    print "Ew!"
为什么不使用内置功能?以下内容在我看来相当像蟒蛇:


_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!"
当然,仅仅搜索简单的子字符串可能会得到一些奇怪的结果。例如
“jeckeyblahchew”
仍然与
“Yum!”
类别匹配。你可能想把
动作
分成几个词,然后寻找紧跟在
“chew”
后面的食物名称(正如@Peter Lyons在回答简单案例时所建议的,前两个词是
“chew X”

忽略顺序,您可以只关注空格分隔的单词(并进一步忽略大写/小写),方法如下:

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

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

x in y
表示“依次查看
y
的每个元素;它们中是否有任何元素等于
x
?”,因此逻辑显然不正确:
list
(对于变量名来说是个坏主意,顺便说一句,因为这是类型的名称)是字符串列表,而
action
是一个字符串-字符串的元素是字母,没有一个字母可以与字符串列表相等。

您似乎想在此处执行一些设置操作(交叉点)

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

foods = ["apples", "oranges", "jerky", "tofu"]
action_words = set(word.lower() for word in action.split())

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

集合上的
&
运算符代表交叉点,请参见。

如何使它返回True,即使列表中的任何食物都在起作用。split()[0]而不是[1]?好吧,根据您正试图做的事情,您可能首先要将动作从字符串解析为单词列表,然后考虑使用<代码> SET>代码>测试<代码> ISSub < /代码>。仅供参考,不要命名变量
列表
。它隐藏了内置类型,没有意义。试试
foods
@Peter:事实上,issubset不起作用-
chew
不在食物列表中(所以像('chew',oranges')这样的集合不是子集。他可以检查两个集合的交集长度是否>0。是的@Gerrat,我知道。这个问题不够具体(或者至少没有确定他想要达到的更大目标)写一个具体的答案。下一步可能是加上“咀嚼”到列表中,然后使用issubset,但是有很多方法可以做到这一点,而且肯定有更清晰的方法来解决TomKo正在处理的任何问题。哦,这很有帮助。澄清了为什么我被告知使用.split()将操作转换为文字。如果我不关心命令的顺序,会像:split=action.split()如果split and any中的“咀嚼”(f在split中代表食品中的f):努力将行动分解成文字,这样类似“horfdorftofuchew”的东西就不会起作用了?当然,那会起作用。我还编辑了我的答案,以包括另一个同样忽略大小写的选项,如果这对你的情况有意义的话。
foods = ["apples", "oranges", "jerky", "tofu"]
action_words = set(word.lower() for word in action.split())

if "chew" in action_words and any(f in action_words for f in foods):
    print "Yum!"
else:
    print "Ew!"
foods = set(["apples", "oranges", "jerky", "tofu"])
actionWords = set(action.split())

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