2014-12-02 64 views
-2

我试图循环访问数组,跳过某些产品类型。我的问题是它不会跳过它们。无论产品类型是否在跳过列表中,都会发生同样的事情。Python中的多条件IF条件

for i in source: 
    if (i["product_type"] == 00 and i["product_type"] == 35 and i["product_type"] == 72): 
     print i["product_name"] + " has been skipped" 
    else: 
     # Upload product 
+7

你的意思'或',而不是'和'?毫无疑问,product_type只能是一件事,它不能同时是00,35和72。 – nos 2014-12-02 12:44:33

回答

2

这里的问题是,你根本不能在一个语句中拥有所有这些条件。一个项目不能具有相同属性的多个值。您的变量i只有一个product_type属性,这样你实际上是寻找的是要测试的的任何一个选项道:你想用的,而不是and运营商or操作

if i["product_type"] == 0 or i["product_type"] == 35 or i["product_type"] == 72: 
    # 

下面是一个更可读版本的代码(假设你的产品类型值为INT:

if i["product_type"] in [ 0, 35, 72 ]: 
    print i["product_name"] + " has been skipped" 
else: 
    # Upload product 

此代码将检查,看看是否product_type值列表中引用:
[ "00", "35", "72" ]


最后要注意,你不需要向parethesis来包装你的条件语句(如你与JS/PHP为例)你可以简单地忽略它们:

if "foo" in [ "foo" ]: 
    pass 

的工作方式相同

if ("foo" in [ "foo" ]): 
    pass 
+0

第二种选择中列表中的值应该是整数而不是字符串 – CoryKramer 2014-12-02 12:47:46

+0

@Cyber​​ - 00怎么可能是一个int? – Lix 2014-12-02 12:48:28

+1

,因为他们使用的是Python 2.x,看看他们的'print'语句....哦,我明白你的观点,是的,它会被解释为'八进制'(尽管对于'0'他们很幸运) – CoryKramer 2014-12-02 12:49:32

0

你应该or那些在一起,而不是and,因为i["product_type"]只能有一个单一的价值,我认为只是一个错字。

if (i["product_type"] == 0 or i["product_type"] == 35 or i["product_type"] == 72): 

但是,它是更容易和更简洁的使用以下

if i["product_type"] in (0, 35, 72): 
+0

有没有使用元组和列表来包含选项之间的区别? – Lix 2014-12-02 12:52:23

+1

@Lix没有不真的。我想,如果有很多元素需要检查,最好使用像{0,35,72}这样的集合来加快成员查找的速度,但在这种情况下,它很简单。 – CoryKramer 2014-12-02 12:53:29

+0

但是这个集合需要一些时间来创建,所以如果你不经常进行测试,最好是按列表/元组去做。 – 2014-12-02 12:59:58