Numeracja elementów w liście

0

Cześć,

mam problem z pewnym zadaniem. Dostaje od użytkownika w inpucie string i chce go ponumerować w taki sposób:

Input >> Banana
Output >> [(B, 0), (a, 0), (n, 0), (a, 1), (n, 1), (a, 2)]

Chodzi o to, żeby ponumerować wystąpienia kolejnych liter i umieścic je w liście jako tuple(litera, numer_wystąpienia)

Ma ktoś pomysł jak to rozgryść?

3

Jak masz mały input i nie przeszkadza ci złożoność kwadratowa, to one-liner może być taki:

>>> input = 'banana'
>>> [(l, input[0:i].count(l)) for i, l in enumerate(input)]
[('b', 0), ('a', 0), ('n', 0), ('a', 1), ('n', 1), ('a', 2)]

Jak chcesz mieć lepszą złożoność to trzymaj sobie słownik mapujący litery na ilość dotychczasowych wystąpień i przeiteruj po liście:

>>> input = 'banana'
>>> output = []
>>> character_map = {}
>>> for i in input:
...     output.append((i, character_map.setdefault(i, 0)))
...     character_map[i] += 1
... 
>>> output
[('b', 0), ('a', 0), ('n', 0), ('a', 1), ('n', 1), ('a', 2)]

1 użytkowników online, w tym zalogowanych: 0, gości: 1