我不明白为什么它返回 False,如果sequence[0]大于sequence[1]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 回答

月关宝盒
TA贡献1772条经验 获得超5个赞
你的问题是,对于这个列表,(q for q in range(len(sequence)-1) if sequence[q]>=sequence[q+1])
is(0)
和0
is falsey。
将实际索引放入任何类型的可迭代对象中是一种红鲱鱼 - 您可能没有意识到您实际上正在这样做。您要做的只是检查谓词sequence[q]>=sequence[q+1]
对于 any是否为真q
。所以改为这样做:
any(sequence[q]>=sequence[q+1] for q in range(len(sequence)-1))
这给出了一个可迭代的布尔值,并检查是否有True
。

米琪卡哇伊
TA贡献1998条经验 获得超6个赞
首先删除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])
添加回答
举报
0/150
提交
取消