如果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的索引
答案 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])