繁体   English   中英

python 是否有等同于 javascript 的 every and some 方法?

[英]does python have an equivalent to javascript's every and some method?

我试图在文档中搜索类似的方法,但我只能找到 pythons all() 和 any()。 但这不一样,因为它只是检查 val 是否为真,而不是像 js 的 every 和 some 方法那样创建你自己的条件。 IE

// return true if all vals are greater than 1
const arr1 = [2, 3, 6, 10, 4, 23];
console.log(arr1.every(val => val > 1)); // true

// return true if any val is greater than 20
const arr2 = [2, 3, 6, 10, 4, 23];
console.log(arr2.some(val => val > 20)); // true

在 python 中是否有类似的方法可以做到这一点?

只需将它与映射结构结合起来,在这种情况下,您通常会使用生成器表达式:

arr1 = [2, 3, 6, 10, 4, 23]
print(all(val > 1 for val in arr1))

arr2 = [2, 3, 6, 10, 4, 23]
print(any(val > 20 for val in arr2))

生成器推导类似于列表推导,只是它们创建的是生成器而不是列表。 您可以使用列表理解,但这会创建一个不必要的中间列表。 生成器表达式将是常量空间而不是线性空间。 如果您想了解有关这些相关结构的更多信息,请参阅另一个问题的已接受答案

或者,尽管我会说得不那么惯用,但您可以使用map

arr1 = [2, 3, 6, 10, 4, 23]
print(all(map(lambda val: val > 1, arr1)))

arr2 = [2, 3, 6, 10, 4, 23]
print(any(map(lambda val: val > 20, arr2)))

是的,Python 有。

numbers = [1, 2, 3, 4, 5]
all_are_one = all(elem == 1 for elem in numbers)
some_are_one = any(elem == 1 for elem in numbers)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM