Pracuję w Pythonie i biorąc pod uwagę następujący problem: biorąc pod uwagę listę, taką jak [1, 0, -2, 0, 0, 4, 5, 0, 3]
, która zawiera liczbę całkowitą 0 wiele razy, chciałbym mieć indeksy na tych 0 i dla każdego , ile razy pojawi się na liście, aż pojawi się inny element lub lista się skończy.Znajdź pozycje i powtórzenia w liście
Po otrzymaniu l = [1, 0, -2, 0, 0, 4, 5, 0]
funkcja powróci ((1, 1), (3, 2), (7, 1))
. Wynikiem jest lista krotek. Pierwszym elementem krotki jest indeks (na liście) danego elementu, a drugi to liczba powtórzeń, aż pojawi się inny element lub lista się kończy.
naiwnie, chciałbym napisać coś takiego:
def myfun(l, x):
if x not in l:
print("The given element is not in list.")
else:
j = 0
n = len(l)
r = list()
while j <= (n-2):
count = 0
if l[j] == x:
while l[j + count] == x and j <= (n-1):
count +=1
r.append((j, count))
j += count
else:
j += 1
if l[-1] == x:
r.append((n-1, 1))
return r
Ale zastanawiałem się, czy nie byłoby ładniej (krótszy?) Sposób robi to samo.
Rzeczywiście, można to zrobić w jednej linii za pomocą 'itertools'.Zajrzę do tej biblioteki. Dziękuję Ci ! – Odile