WItam. Znalazłem zadanie, długi plik, wydaje się zapisany za pomocą JSON-a. Zadanie polega na wyciągnięciu z całego pliku cyfr i zsumowanie ich. Można jakąś pętlą/funkcją wyciągnąć cyfry. No i jeśli jest napisany w JSON to czy muszę użyć konsoli JavaScript, czy w Pythonie da radę?
- Rejestracja:prawie 15 lat
- Ostatnio:15 dni
1
sum(int(ch) for ch in json if ch.isdigit())
edytowany 1x, ostatnio: jackweb
Oczywiście zmienna
json
musi być stringiem reprezentującym JSONa. ;-)
To znaczy? Pierwszy raz się z czymś taki spotykam
Ta składnia mówi, że interujemy po wszystkich znakach JSONa (
for ch in json
) i zamieniamy je na liczbę int(ch)
. Pod warunkiem, że dany znak reprezentuje cyfrę if ch.isdigit()
. Wszystkie cyfry trafiają do funkcji sum
, która je sumuje.
Można szukać czegoś podobnego pod nazwą list comprehension.
- Rejestracja:około 6 lat
- Ostatnio:ponad rok
1
Lepsze podejście:
> grep -P -o '\d' big10.txt | awk '{ sum += $0 }; END { print 0 + sum }'
1031770
> grep -P -o '\d' big10.txt | datamash sum 1
1031770
>
> time -f %e python3 -c 'import sys; print(sum(int(ch) for ln in sys.stdin for ch in ln if ch.isdigit()))' <big10.txt
1031770
5.79
> time -f %e bash -c 'grep -P -o "\d" | awk "{ sum += \$0 }; END { print 0 + sum }"' <big10.txt
1031770
0.36
> time -f %e bash -c 'grep -P -o "\d" | datamash sum 1' <big10.txt
1031770
0.33
>
edytowany 3x, ostatnio: Mózg
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.
cyfr
czyliczb
? Różnica jest taka że np. przystart111sep111stop
suma cyfr to 6, suma liczb to 222. Upewniam się tylko z tego względu że ludzie to mylą, nie jest to nic osobistego, po prostu wynik będzie nieprawidłowy dla rozwiązań kolegów niżej jeśli chodziło o liczby.grep
wystarczy zamienić\d
na\d+
. :>