如何在python中进行切片和使用any()?

How to do slicing and use any() in python?

我正在尝试查找小于列表右侧数字(此处为 i)的数字

如果这里的 1,2,3,4 对于任何数字,它的右边没有小于 that.I 的数字要用 any() 和切片来实现。

但是当我在 python 中使用以下代码执行此操作时,我得到的是 True 但它应该是 False 我在哪里缺少逻辑?为什么输出为 True?

num=[1,2,3,4]

for i in range(1,len(num)-1):
    print (any(num[i+1:])<num[i])

输出:

True
True

any 函数应该采用布尔值序列,通常由生成器表达式给出。你的代码输出 True 的原因是因为 num[i+1:] 是一个非零整数列表,被认为是 "truthy",所以 "are any of them true?" 的答案是 "yes" .

你可以这样写:

num = [1,2,3,4]

for i in range(1, len(num) - 1):
    print(any( x < num[i] for x in num[i+1:] ))

输出:

False
False

你需要检查这里到底发生了什么。你有:

any(num[i+1:]) < num[i]

any returns 如果列表中的任何元素等于 true,则为 true。由于您所有的数字都是非零的,因此它们都等同于 true。然后右边比较Truenum[i],所以你有True < 2True < 3。由于 True 等同于 1,因此两者的结果都是 1.

你可能想要这样的东西:

print( any(x < num[i] for x in num[i+1:]))