-2

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

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

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

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

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

(对不起,抽象)

4

4 回答 4

4

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

x = dog if len(BestX) == 1 and len(starcount) == 1 else cat
于 2013-08-01T20:30:22.147 回答
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

经过澄清,第二个解决方案似乎已经解决了 OP 的问题

于 2013-08-01T20:31:28.587 回答
3

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

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

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


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

但我不知道你真正想要什么,因为你的问题是矛盾的。我会把你的英语翻译成代码,希望这足以让你继续前进:

如果任一列表中有超过 1 个项目,我不想将变量 x 定义为“cat”。

…大概意思是您确实想将其定义为dog?看起来是这样的:

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

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

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

else:
    x=dog

... 或者您可能想知道两个列表中是否总共有 1 个项目?

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

……这意味着在其他情况下(例如,每个列表中恰好有 1,或者每个列表中有 0)你最终会得到xundefined?

另请注意,您的描述在两种情况下都设置xdog(或者至少在一种情况下是“不猫”,在另一种情况下是“狗”),这看起来很愚蠢。


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

于 2013-08-01T20:30:20.677 回答
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
于 2013-08-01T20:33:18.513 回答