Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

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 
like image 270
shaund Avatar asked Aug 25 '14 14:08

shaund


People also ask

What is the Python equivalent of an array?

Note: Python does not have built-in support for Arrays, but Python Lists can be used instead.

Is there a Python equivalent for JavaScript?

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.

What is an array prototype?

Definition and Usage prototype allows you to add new properties and methods to arrays. prototype is a property available with all JavaScript objects.

Can I use array prototype at ()?

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.


2 Answers

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 
like image 85
Amadan Avatar answered Oct 11 '22 12:10

Amadan


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

like image 43
Luis Masuelli Avatar answered Oct 11 '22 13:10

Luis Masuelli