如果满足条件,则将变量定义为_____

时间:2013-08-01 20:28:17

标签: python boolean

我正在尝试使用一些布尔逻辑来定义变量。

if BestX!=1 or starcount!=1:
  x=cat

if BestX==1 or starcount==1:
  x=dog

其中BestX和starcount都是列表。基本上,如果任一列表中有多个项目,我不想将变量x定义为'cat'。但是,如果两个列表中只有一个项目(同时),则x应定义为“dog”。

正如我的逻辑目前一样,如果我在starcount中有1个项目,但是BestX中的众多项目被定义为'cat'......不是我想要的。如何组合它,以便如果其中任何一个大于1 x将被定义为“狗”。

(抱歉抽象)

4 个答案:

答案 0 :(得分:4)

您可以使用python版本的三元运算符简洁地完成:

x = dog if len(BestX) == 1 and len(starcount) == 1 else cat

答案 1 :(得分:4)

如果你想要x=dog,如果 列表至少有一个元素,那么你需要x=cat if len(BestX) > 0 or (starcount) > 0: x=dog

x=dog

您的问题似乎表明了相互矛盾的要求。您最初要求x=cat if len(BestX) == 1 and (starcount) == 1: x=dog ,如果两个列表中只有一个元素,就会像这样实现

{{1}}

澄清后,第二解决方案似乎解决了OP的问题

答案 2 :(得分:3)

如果我理解了这个问题,你真正想要的是:

if len(BestX) != 1 or len(starcount) != 1:
    x=cat
else:
    x=dog

您的代码唯一的主要问题是您将BestX本身与1进行比较,而不是其长度,并且列表永远不会等于1。< / p>


同时,你的两个条件并不涵盖整个空间。如果其中一个值为1,而另一个值不是,则 条件都不为真,我认为这不是你想要的。

但我不知道你实际上做什么想要什么,因为你的问题是矛盾的。我会把你的英语翻译成代码,希望这足以让你顺利进行:

  

如果任一列表中有多个项目,我不想将变量x定义为'cat'。

...可能意味着你想要将其定义为dog?这是看起来像:

if len(BestX) > 1 or len(starcount) > 1:
    x=dog
  

但是,如果两个列表中只有一个项目(同时),则x应定义为“dog”。

...我认为应该是另一种情况的补充,在这种情况下它只是:

else:
    x=dog

...或者你想知道两个名单中总共有1个项目在一起吗?

elif len(BestX) + len(starcount) == 1:
    x=dog

...意味着在其他情况下(例如,每个列表中只有1个,或者每个列表中有0个),最终会导致x未定义?

另请注意,在两种情况下,您的说明都会将x设置为dog(或者至少在一种情况下为“不对猫”,在另一种情况下至少为“对象”),这似乎很愚蠢


您可能想知道为什么Python允许您将列表与1进行比较,而这种比较毫无意义。好吧,Python通常允许你询问两个完全无关的类型是否相等,并且总是回答它们不是。如果您尝试使用>而不是!=,那么您将获得TypeError(在Python3中 - 在Python 2中,您曾经获得过一致但任意且无意义的答案)。

答案 3 :(得分:2)

  

如何组合它,以便其中任何一个大于1 x   将被定义为“狗”。

请记住处理空列表案例。

#if either list has more than one item
if len(BestX) > 1 or len(starcount) > 1:
    x=cat
#if both lists have only 1 item each
elif len(BestX) == 1 and len(starCount) == 1:
    x=dog
else:
    #do something if your case is 0 or negative!
    x=cat

如果你没有在条件中使用len()但是比检查更早,这是非常重要的。如果您正在执行与长度相关的一些计算,则可能会以负长度着陆。

编辑:

  

哦,我看到挂断了。好的,除非他们每人都有1个项目   将被定义为'猫'。希望能搞清楚。

澄清之后,这是一个简单的方法来做你想要的事情:

#if both lists have exactly 1 item each
if len(BestX) == 1 and len(starCount) == 1:
    x=dog
#all other cases
else:
    x=cat

更简单的解决方案:

#default x as cat
x=cat
#change x if both lists have exactly 1 item each
if len(BestX) == 1 and len(starCount) == 1:
    x=dog