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

问题描述 投票:0回答:2

我正在尝试查找小于列表右边数字(此处为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
python slice any
2个回答
1
投票

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

1
投票

您需要检查此处实际发生的情况。您有:

any(num[i+1:]) < num[i]
如果列表中的任何元素等于true,则

any返回true。由于您所有的数字都不为零,因此它们都等于true。然后右侧将Truenum[i]进行比较,因此您有True < 2True < 3。由于True等效于1,因此两者都得出1。

您可能想要类似的东西:

print( any(x < num[i] for x in num[i+1:]))
© www.soinside.com 2019 - 2024. All rights reserved.