What is the python equivalent of JavaScript's Array.prototype.some?

吃可爱长大的小学妹 提交于 2021-02-16 15:46:35

问题


Does python have any equivalent to JavaScript's Array.prototype.some / every?

Trivial JavaScript example:

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

Will output:

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

The below python seems to be functionally equivalent, but I do not know if there is a more "pythonic" approach.

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

回答1:


Python has all(iterable) and any(iterable). So if you make a generator or an iterator that does what you want, you can test it with those functions. For example:

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

They are actually defined in the documentation by their code equivalents. Does this look familiar?

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



回答2:


No. NumPy arrays have, but standard python lists don't. Even so, the numpy array implementations are not what you'd expect: they don't take a predicate, but evaluate every element by converting them to boolean.

Edit: any and all exist as functions (not as methods), but they don't apply predicates, but consider booleanized values as numpy methods.

In Python, some could be:

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

You could implement every:

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

Edit: dumb sample:

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

Try them by urself



来源:https://stackoverflow.com/questions/25488148/what-is-the-python-equivalent-of-javascripts-array-prototype-some

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!