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
Note: Python does not have built-in support for Arrays, but Python Lists can be used instead.
Python's "object-based" subset is roughly equivalent to JavaScript. Like JavaScript (and unlike Java), Python supports a programming style that uses simple functions and variables without engaging in class definitions.
Definition and Usage prototype allows you to add new properties and methods to arrays. prototype is a property available with all JavaScript objects.
Array.prototype.at() The at() method takes an integer value and returns the item at that index, allowing for positive and negative integers. Negative integers count back from the last item in the array.
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
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With