Python - zadanie z tablicami i pętlą

Python - zadanie z tablicami i pętlą
M1
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 2 lata
  • Postów:1
0

Witam, mam problem z drugą częścią tego zadania:
Pobierać od użytkownika wartości do momentu wpisania wartości zero. Znaleźć i
wypisać wszystkie elementy, które pojawiły się w tablicy więcej niż dwa razy.

Na tą chwile mam coś takiego:

Kopiuj
wartosc = 0
tab = []
while True:
    wartosc = int(input())
    if wartosc == 0:
        break
    tab += str(wartosc)

for q in tab:
    sum = 0
    for w in tab:
        if q == w:
                sum += 1
    if sum > 2:
        print(q,sum)

Problem polega na tym, że program dobrze oblicza ilość wystąpień danego elementu, ale wypisuje ten element kilkukrotnie, a obok niego wartość.
Przykład:
dla 1 2 2 2 3 3 3 3
Wydruk:
2 3
2 3
2 3
3 4
3 4
3 4
3 4
Oczekiwany efekt:
2 3
3 4
Jak do takiego efektu dojść?

edytowany 1x, ostatnio: matura112
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:3 minuty
  • Postów:4935
2

Jak sie uda, to i tak będzie przykra złożoność nie możesz tego przy uzyciu dict zrobić?


Arthan
  • Rejestracja:około 18 lat
  • Ostatnio:ponad rok
3

Nawet jeśli dane mają być przechowywane w tablicy to i tak bym tworzył i zliczał przy użyciu dict, jak jak wskazał @lion137
Dla przykładu tak ...

Kopiuj
wartosc = 1
tab = []
tab_count = {}
while wartosc != 0:
    wartosc = int(input())
    tab.append(wartosc)
    if wartosc in tab_count:
        tab_count[wartosc] += 1
    else:
        tab_count[wartosc] = 1

for value, count in tab_count.items():
    if count > 2:
        print(value, count)

edytowany 1x, ostatnio: Arthan
WO
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad rok
  • Postów:25
1

Przy użyciu dicta i tablic można tak też spróbować:

Kopiuj
values = {}
while True:
    value = int(input())
    if not value:
        break
    values[value] = values.get(value, []) + [value]

for key, val in values.items():
    if len(val) > 2:
        print(key, len(val))

edytowany 1x, ostatnio: wojtyk

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.