x = [0, 1, -2, 3, 4, 5]
all ([i for i in range (1, len(x)) if x [i-1] < x[i]]) ?
为什么此代码会打印True
?
1> -2所以我应该打印False
。
答案 0 :(得分:5)
您的代码没有按照您的想法执行。它首先过滤掉一些元素,然后评估一堆索引的真实性。由于所有索引都是严格正数,因此它们都是真实的,您的代码总是评估为True
。
根据您的描述,您实际上要做的是:
>>> all(x[i-1] < x[i] for i in range (1, len(x)))
False
迭代所有连续元素对,并检查第一个元素是否小于第二个元素。
另一种写这个的方法是:
>>> all(a < b for (a, b) in zip(x, x[1::]))
False
答案 1 :(得分:3)
i
的所有值都来自range(1, len(x))
,因此它们都是正整数。正整数是真的,因此all()
将返回True
。