什么是JavaScript的Array.prototype.some的python等价物?

python是否与JavaScript的Array.prototype.some / every有相同之处?

简单的JavaScript示例:

var arr = [ "a", "b", "c" ];
arr.some(function (element, index) {
    console.log("index: " + index + ", element: " + element)
    if(element === "b"){
        return true;
    }
});

会输出:

index: 0, element: a
index: 1, element: b

下面的python似乎在功能上是等价的,但我不知道是否有更多的“pythonic”方法。

arr = [ "a", "b", "c" ]
for index, element in enumerate(arr):
    print("index: %i, element: %s" % (index, element))
    if element == "b":
        break

Python拥有all(iterable)any(iterable) 。 因此,如果您创建一个生成器或迭代器来执行您想要的操作,则可以使用这些函数对其进行测试。 例如:

some_is_b = any(x == 'b' for x in ary)
all_are_b = all(x == 'b' for x in ary)

它们实际上是通过它们的代码等价物在文档中定义的。 这看起来很熟悉吗?

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False

不,NumPy数组有,但标准的Python列表没有。 即使如此,numpy数组的实现并不是你所期望的:它们不会使用谓词,而是通过将其转换为布尔值来评估每个元素。

编辑anyall存在的功能(不作为方法),但他们不应用谓词,但考虑布尔化值为numpy方法。

在Python中, some可能是:

def some(list_, pred):
    return bool([i for i in list_ if pred(i)])

#or a more efficient approach, which doesn't build a new list
def some(list_, pred):
    return any(pred(i) for i in list_) #booleanize the values, and pass them to any

你可以实现every

def every(list_, pred):
    return all(pred(i) for i in list_)

编辑 :哑巴样本:

every(['a', 'b', 'c'], lambda e: e == 'b')
some(['a', 'b', 'c'], lambda e: e == 'b')

自己试试

链接地址: http://www.djcxy.com/p/80933.html

上一篇: What is the python equivalent of JavaScript's Array.prototype.some?

下一篇: Get column names (headers) from hdf file