Hallo liebe Slytherin-Community
Ich hänge nun schon seit einer kleinen Weile an einer Aufgabe fest, ich habe schon einige Varianten ausprobiert aber nichts hilft. Vielleicht kann mir ja jemand von euch einen Hinweis darauf geben, wo was schieft hängt?
Ich werkle an einer Funktion rum, die als Parameter eine Liste und eine Sequenz eines Elements der Liste erhält. Nehmen wir an, die Liste würde ein Element ["Hallo"] enthalten; ich möchte nun, dass wen ich die Funktion aufrufe (allIndex(liste,"l")) mir das Programm die Positionen der gesuchten Sequenz (in diesem Fall "l") ausgibt, gleichzeitig soll sie mir bei einer allfälligen eingabe einer nicht vorhandenen Sequenz (z.B "k") eine entsprechende Antwort ausgeben. In Conclusio:
Zurückgegeben werden soll eine Liste mit allen Index-
Positionen, an denen "element" vorkommt. Falls element nicht in der Liste vorkommt, wird z.B -1 zurückgegeben.
##def allIndex(liste, element):
## list(liste)
## for position, element in enumerate(liste):
print(position, element)
##
##allIndex("Hallo", "l")
Meine Eingaben sind Kraut und Rüben und ich wäre sehr froh, wenn mich jemand in eine richtung "schubsen" könnte, sprich mir empfehlen, was für ein Befehl/Anwendung hierfür sinnvoll ist.
Mit dem befehl "for position, element in enumerate(liste):
print(position, element)"
möchte ich die liste, die durch den Befehl "list" "verlistet" wird nummerieren und dadurch durchsuchbar für eine einzelne Sequenz machen ->
Sprich das Programm müsste nach "l" suchen.
Für allfällige Störungen oder entstehende Umstände entschuldige ich mich im Voraus.
Liebe Grüsse
Atlanta
Funktion Liste mit zwei Parametern
Möchtest du so etwas in der Richtung?
Code: Alles auswählen
In [1]: s = 'flusskrebs'
In [2]: def iter_indices(s, char):
...: start = 0
...: while True:
...: try:
...: position = s.index(char, start)
...: except ValueError:
...: return
...: yield position
...: start = position + 1
...:
In [3]: list(iter_indices(s, 's'))
Out[3]: [3, 4, 9]
@Atlanta: Deine Eingabe ist eine Liste mit Sequenzen? Dann wäre das Ergebnis doch eine Liste von Listen mit Positionen. Was aber mehr Sinn machen würde, war als Parameter nur eine Sequenz zu nehmen, und die nicht noch extra in eine Liste zu packen. So wie Deine Funktion nämlich jetzt aussieht, wird nur die äußere Liste mit for durchlaufen und nicht die inneren Sequenzen. Wenn der Rückgabewert eine Liste von Positionen ist, dann wäre die natürliche Antwort, wenn das Element nicht in der Sequenz vorkommt, eine leere Liste.
Vielleicht hilft Dir das schon weiter, wenn Du meine Verwirrung aufklären kannst und damit selbst das Problem etwas klarer siehst.
Vielleicht hilft Dir das schon weiter, wenn Du meine Verwirrung aufklären kannst und damit selbst das Problem etwas klarer siehst.
@Atlanta: Anmerkung zum Rückgabewert: Der sollte in jedem Fall gleichartig sein. Also Liste oder -1 ist keine gute Idee. Warum nicht in *jedem* Fall die Liste der Treffer. Wenn kein Treffer, dann ist das eben eine leere Liste. Das vereinfacht sowohl den Code in der Funktion, als auch den beim Aufrufer weil der nicht mit Sonderfällen umgehen muss wenn er nicht tatsächlich muss/will. Beispiel: Ausgabe aller Treffer. Mit komischem Sonderwert:
Ohne komischen Sonderwert:
Code: Alles auswählen
indices = all_indices(haystack, needle)
if indices != -1:
for index in indices:
print(index)
Code: Alles auswählen
for index in all_indices(haystack, needle):
print(index)
Das geht am besten entweder (wie schon gezeigt) mit find() oder sozusagen rein pythonisch:
Wenn das gesuchte Element nicht vorhanden ist, wird eine leere Liste geliefert.
Code: Alles auswählen
def findall(iterable, needle):
return [i for i, item in enumerate(iterable) if item == needle]
Vielen Dank an die schnellen Hilfen, ich werde mich gleich ans werkeln machen und eure Vorschläge und HInweise prüfen und danach ein Feedback geben..