list [0]大于list [1]。因此,它应该返回True,并返回False。我不明白为什么

时间:2018-11-08 16:24:03

标签: python

如果sequence[0]大于sequence[1],我不明白为什么它返回False

sequence=[10, 1, 2, 3, 4, 5]

a=any(q for q in range(len(sequence)-1) if sequence[q]>=sequence[q+1])
print(a)

它适用于大于0的索引

2 个答案:

答案 0 :(得分:4)

您的问题是,对于此列表,(q for q in range(len(sequence)-1) if sequence[q]>=sequence[q+1])(0),而0为假。

在这里,将实际索引放入任何可迭代的对象中都是一个红鲱鱼-并且您可能没有意识到自己实际上在做。您只想检查谓词sequence[q]>=sequence[q+1]是否对任何q是正确的。而是这样做:

any(sequence[q]>=sequence[q+1] for q in range(len(sequence)-1))

这提供了一个可迭代的布尔值,并检查是否有True

答案 1 :(得分:0)

首先删除any(),以了解您的理解力实际上为您提供了什么:

[q for q in range(len(sequence)-1) if sequence[q]>=sequence[q+1]]
>>> [0]

也就是说,存在一对条件为真的数字,它在原始列表中的索引为0。

any([0])False,因为0为假。 any()检查每个项目是否真实。

罗宾(Robin)的解决方案是通常的方法,将比较结果用作屈服值。但是不产生错误值会更快很多,您可能会注意到序列是否足够长,因此可以使用以下形式:

any(True for q in range(len(sequence)-1) if sequence[q]>=sequence[q+1])