Hallo Gemeinde,
ich bin auf die Frage gestoßen, wie ich in einer Sequenz den Index finde, an dem zum Beispiel x zum 7ten mal auftritt. Ich kann natürlich erstmal die ersten sechs Stellen aufspüren, wo x auftaucht, doch das erscheint mir etwas stumpf. Gibt es bereits eine Funktion, die sowas kann?
Das beste, was mir bislang eingefallen ist, besteht darin, die die ersten sechs x in meiner Liste (besser einem Klon davon) durch ein anderes Zeichen zu ersetzen und danach einfach Sequenz.index('x') zu benutzen. So muss ich mir zwischendurch zumindest nicht merken, wo die ersten sechs x stehen.
Über Kommentare und Anregungen würde ich mich freuen. Danke und Grüße, Tyrax
Verallgmeinere Liste.index(dings)
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Nein, so eine Funktion gibt es nicht, es ist ja auch ganz einfach selbst zu schreiben:
Den Code robust zu machen gibts als Uebung
Code: Alles auswählen
def nth_index(iterable, target, n=1):
for i, e in enumerate(iterable):
if e == target:
n -= 1
if n == 0:
return i
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Nee, dazu wäre ja viel Aufwand notwendig - so etwas bietet eine Liste nicht.Tyrax hat geschrieben: ich bin auf die Frage gestoßen, wie ich in einer Sequenz den Index finde, an dem zum Beispiel x zum 7ten mal auftritt. Ich kann natürlich erstmal die ersten sechs Stellen aufspüren, wo x auftaucht, doch das erscheint mir etwas stumpf. Gibt es bereits eine Funktion, die sowas kann?
Kapiere ich nicht!Tyrax hat geschrieben: Das beste, was mir bislang eingefallen ist, besteht darin, die die ersten sechs x in meiner Liste (besser einem Klon davon) durch ein anderes Zeichen zu ersetzen und danach einfach Sequenz.index('x') zu benutzen. So muss ich mir zwischendurch zumindest nicht merken, wo die ersten sechs x stehen.
Ich würde mich einfach eine Liste / Dict anlegen, in der ich mir die Indizes der Zeichen merke.
Code: Alles auswählen
In [117]: import string
In [118]: from random import choice
In [119]: data = [choice(string.lowercase) for _ in range(20)]
In [120]: ",".join(data)
Out[120]: 'f,h,j,h,m,s,u,k,y,i,w,p,i,p,i,v,n,y,e,o'
In [121]: from collections import defaultdict
In [122]: indices = defaultdict(list)
In [123]: for index, item in enumerate(data):
.....: indices[item].append(index)
.....:
.....:
In [124]: indices
Out[124]: defaultdict(<type 'list'>, {'e': [18], 'f': [0], 'i': [9, 12, 14], 'h': [1, 3], 'k': [7], 'j': [2], 'm': [4], 'o': [19], 'n': [16], 'p': [11, 13], 's': [5], 'u': [6], 'w': [10], 'v': [15], 'y': [8, 17]})
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert