我正在尝试使用一些布尔逻辑来定义变量。
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将被定义为“狗”。
(抱歉抽象)
答案 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