为了账号安全,请及时绑定邮箱和手机立即绑定

list[0] 比 list[1] 大。所以它应该返回True,它返回False。我不明白为什么

list[0] 比 list[1] 大。所以它应该返回True,它返回False。我不明白为什么

largeQ 2021-08-11 19:44:46
我不明白为什么它返回 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)0is falsey。

将实际索引放入任何类型的可迭代对象中是一种红鲱鱼 - 您可能没有意识到您实际上正在这样做。您要做的只是检查谓词sequence[q]>=sequence[q+1]对于 any是否为真q。所以改为这样做:

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

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


查看完整回答
反对 回复 2021-08-11
?
米琪卡哇伊

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])


查看完整回答
反对 回复 2021-08-11
  • 2 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号