JavaScript的every()方法在Python中的等效实现是什么?
JavaScript
every() 方法的Python等效实现 内置等效方案
Python 有内置函数all(),功能与 JavaScript 的every()完全匹配:
- 二者都是只要有一个元素不满足判断条件就立即短路返回
False,所有元素都满足才返回True - 二者对空序列/空可迭代对象调用时,都会返回
True,行为完全一致
你给出的JS代码可以直接翻译为如下Python代码:
# 写法1:直接内联判断,无需单独定义lambda if len(self.risultato) == len(self.atteso) and all(v == self.atteso[i] for i, v in enumerate(self.risultato)): # 原if块内的逻辑 pass
如果你要复用已经写好的lambda表达式,也可以这么写:
predicate = lambda v, i: v == self.atteso[i] if len(self.risultato) == len(self.atteso) and all(predicate(v, i) for i, v in enumerate(self.risultato)): pass
如果可以确认两个列表长度一定相等,还可以直接简化为:
if self.risultato == self.atteso: pass
自定义every()函数
如果需要实现和JSevery()调用方式完全一致的自定义函数,可以参考如下实现:
def every(iterable, predicate): """ 功能与JavaScript Array.every()完全对齐 :param iterable: 待遍历的可迭代对象 :param predicate: 断言函数,接收参数为(当前元素, 当前索引),返回布尔值 :return: 所有元素都满足断言返回True,否则返回False """ for index, value in enumerate(iterable): if not predicate(value, index): return False return True
调用方式和JS完全一致,可直接复用你写的lambda逻辑:
if len(self.risultato) == len(self.atteso) and every(self.risultato, lambda v, i: v == self.atteso[i]): pass
内容的提问来源于stack exchange,提问作者user13690062
相关产品推荐
相关产品推荐

