Python voor elk equivalent

Ik duik in Python en ik heb een vraag over foreach-iteratie. Ik ben nieuw in Python en heb enige ervaring met C#. Dus ik vraag me af of er een gelijkwaardige functie in Python is voor iteratie over alle items in mijn verzameling, b.v.

pets = ['cat', 'dog', 'fish']
marks = [ 5, 4, 3, 2, 1]

of zoiets.


Antwoord 1, autoriteit 100%

Natuurlijk. Een for-lus.

for f in pets:
    print f

Antwoord 2, autoriteit 10%

Zoals dit:

for pet in pets :
  print(pet)

In feite heeft Python alleenforeach style forloops.


Antwoord 3, autoriteit 5%

Het is ook interessant om dit te observeren

Om de indices van een reeks te herhalen, kunt u range()en len()als volgt combineren:

a = ['Mary', 'had', 'a', 'little', 'lamb']
for i in range(len(a)):
  print(i, a[i])

uitvoer

0 Mary
1 had
2 a
3 little
4 lamb

Bewerken#1: Alternatieve manier:

Bij het doorlopen van een reeks kunnen de positie-index en de bijbehorende waarde tegelijkertijd worden opgehaald
tijd met behulp van de functie enumerate().

for i, v in enumerate(['tic', 'tac', 'toe']):
  print(i, v)

uitvoer

0 tic
1 tac
2 toe

Antwoord 4, autoriteit 2%

Voor een bijgewerkt antwoord kunt u eenvoudig een functie foreachin Python bouwen:

def forEach(list, function):
    for i, v in enumerate(list):
        function(v, i, list)

U kunt dit ook aanpassen aan map, reduce, filteren alle andere arrayfuncties van andere talen of voorkeuren die u maar wilt over te brengen. For-lussen zijn snel genoeg, maar de boilerplate is langer dan foreachof de andere functies. Je zou de lijst ook kunnen uitbreiden om deze functies te hebben met een lokale verwijzing naar een klasse, zodat je ze ook rechtstreeks op lijsten kunt aanroepen.


Antwoord 5

Hoewel de bovenstaande antwoorden geldig zijn, is dit de benadering die ik graag gebruik als je een dictaat {key:value} herhaalt:

for key, value in Dictionary.items():
    print(key, value)

Als ik dus iets zou willen doen als alle sleutels en waarden in mijn woordenboek verstrengelen, zou ik dit doen:

stringified_dictionary = {}
for key, value in Dictionary.items():
    stringified_dictionary.update({str(key): str(value)})
return stringified_dictionary

Dit voorkomt mutatieproblemen bij het toepassen van dit type iteratie, wat naar mijn ervaring (soms) grillig gedrag kan veroorzaken.


Antwoord 6

De constructie foreachis helaas niet intrinsiek aan collecties, maar extern aan collecties. Het resultaat is tweeledig:

  • het kan niet worden geketend
  • het vereist twee regels in idiomatische python.

Python ondersteunt geen echte foreachrechtstreeks op collecties. Een voorbeeld zou zijn

myList.foreach( a => print(a)).map( lambda x:  x*2)

Maar python ondersteunt het niet. Gedeeltelijke oplossingen voor deze en andere ontbrekende functionele functies in python worden geleverd door verschillende bibliotheken van derden, waaronder een bibliotheken die ik heb helpen schrijven: zie https://pypi.org/project/infixpy/


Antwoord 7

Voor een dict kunnen we een for-lus gebruiken om de index, keyen valuete doorlopen:

dictionary = {'a': 0, 'z': 25}
for index, (key, value) in enumerate(dictionary.items()):
     ## Code here ##

Antwoord 8

Dit werkte voor mij:

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

Other episodes