如何在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。然后右边比较True
到num[i]
,所以你有True < 2
和True < 3
。由于 True
等同于 1
,因此两者的结果都是 1.
你可能想要这样的东西:
print( any(x < num[i] for x in num[i+1:]))
我正在尝试查找小于列表右侧数字(此处为 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。然后右边比较True
到num[i]
,所以你有True < 2
和True < 3
。由于 True
等同于 1
,因此两者的结果都是 1.
你可能想要这样的东西:
print( any(x < num[i] for x in num[i+1:]))