这个问题已经有了答案:
Pythonic way to check if a list is sorted or not
21个答案
我有一个名为checker(nums)的函数,它有一个参数,稍后将接收一个列表。我想用这个列表来检查每个元素是否大于或等于前一个元素。
例子:
我有一个列表,我必须检查它是否满足条件。
既然这样,函数应该返回[1, 1, 2, 2, 3]
我的代码:
def checker(nums):
for x in range(len(nums)):
if x+1<len(nums):
if nums[x] <= nums[x+1] and nums[-1] >= nums[-2]:
return True
如果第一个条件为真,则只运行一次并返回真。
我看到了一个声明,如果一切,并不确定如何使用它。
最佳答案
您的功能可以简化为:
def checker(nums):
return all(i <= j for i, j in zip(nums, nums[1:]))
注意以下事项:
zip
并行循环其参数,即检索到nums[0]
>nums[1]
等。nums[1]
执行实际比较。用括号
nums[2]
表示的generator expression确保每次提取一个条件值,即i <= j
或()
。这被称为懒惰评估。True
只需检查所有值是否为False
。同样,这是懒惰的。如果从生成器表达式中延迟提取的值之一是all
,则它会短路并返回True
。选择
为了避免为
False
的第二个参数构建列表的开销,可以使用False
。当您的输入是迭代器时,这个选项特别有用,即它不能像zip
那样被切片。from itertools import islice
def checker(nums):
return all(i <= j for i, j in zip(nums, islice(nums, 1, None)))
另一个迭代器友好选项是使用
itertools.islice
list
recipe,也可通过第三方获得:# from more_itertools import pairwise # 3rd party library alternative
from itertools import tee
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return zip(a, b)
def checker(nums):
return all(i <= j for i, j in pairwise(nums))
关于python - 如何在Python中使用IF ALL语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48868998/