我正在尝试查找小于列表右边数字(此处为i)的数字
如果这里有任何数字的1,2,3,4,则其右边没有比这个数字小的数字。我想用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:]
是一个非零整数的列表,这些整数被认为是“真实的”,因此答案为“它们是否为真?”是“是”。
您可以这样写:
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]
如果列表中的任何元素等于true,则any
返回true。由于您所有的数字都不为零,因此它们都等于true。然后右侧将True
与num[i]
进行比较,因此您有True < 2
和True < 3
。由于True
等效于1
,因此两者都得出1。
您可能想要类似的东西:
print( any(x < num[i] for x in num[i+1:]))