I am diving into Python and I have a question about foreach iteration. I am new to Python and I have some experience in C#. So I am wondering, if there is some equivalent function in Python for iteration all over all items in my collection, e.g.
pets = ['cat', 'dog', 'fish']
marks = [ 5, 4, 3, 2, 1]
or something like this.
While the answers above are valid, if you are iterating over a dict {key:value} it this is the approach I like to use:
for key, value in Dictionary.items():
print(key, value)
Therefore, if I wanted to do something like stringify all keys and values in my dictionary, I would do this:
stringified_dictionary = {}
for key, value in Dictionary.items():
stringified_dictionary.update({str(key): str(value)})
return stringified_dictionary
This avoids any mutation issues when applying this type of iteration, which can cause erratic behavior (sometimes) in my experience.
Its also interesting to observe this
To iterate over the indices of a sequence, you can combine range()
and len()
as follows:
a = ['Mary', 'had', 'a', 'little', 'lamb']
for i in range(len(a)):
print(i, a[i])
output
0 Mary
1 had
2 a
3 little
4 lamb
Edit#1: Alternate way:
When looping through a sequence, the position index and corresponding value can be retrieved at the same
time using the enumerate()
function.
for i, v in enumerate(['tic', 'tac', 'toe']):
print(i, v)
output
0 tic
1 tac
2 toe
This worked for me:
def smallest_missing_positive_integer(A):
A.sort()
N = len(A)
now = A[0]
for i in range(1, N, 1):
next = A[i]
#check if there is no gap between 2 numbers and if positive
# "now + 1" is the "gap"
if (next > now + 1):
if now + 1 > 0:
return now + 1 #return the gap
now = next
return max(1, A[N-1] + 1) #if there is no positive number returns 1, otherwise the end of A+1
Like this:
for pet in pets :
print(pet)
In fact, Python only has foreach style for
loops.
For an updated answer you can build a forEach
function in Python easily:
def forEach(list, function):
for i, v in enumerate(list):
function(v, i, list)
You could also adapt this to map
, reduce
, filter
, and any other array functions from other languages or precedence you'd want to bring over. For loops are fast enough, but the boiler plate is longer than forEach
or the other functions. You could also extend list to have these functions with a local pointer to a class so you could call them directly on lists as well.
For a dict we can use a for loop to iterate through the index
, key
and value
:
dictionary = {'a': 0, 'z': 25}
for index, (key, value) in enumerate(dictionary.items()):
## Code here ##
The foreach
construct is unfortunately not intrinsic to collections but instead external to them. The result is two-fold:
Python does not support a true foreach
on collections directly. An example would be
myList.foreach( a => print(a)).map( lambda x: x*2)
But python does not support it. Partial fixes to this and other missing functionals features in python are provided by various third party libraries including one that I helped author: see https://pypi.org/project/infixpy/
Source: Stackoverflow.com