Hvordan telle tegn i Python


Beste svaret

Spørsmålet er ganske vagt. Tegn, i Python, er normalt inneholdt og behandles i strenger. Funksjonen len () (innebygd) returnerer lengden på de fleste containere i Python (inkludert strenger). Så det er en slags «telling.» over strengene eller teksten og oppdaterer ordboksverdiene mens du går. Eller du kan bare bruke en forekomst av Counter -klassen for samlinger -modulen i standarden biblioteker.

from collections import Counter

counts = Counter(somestring)

# counts now contains a dictionary like mapping of item counters

counts.update(morestuff)

# counts have been updated with new items and additional occurrences of previously

# seen item.

Forekomster av Counter-klassen kan telle alt som kan vurderes som en iterabel av hashable-objekter.

Hvis du mener å telle tegn på en annen måte, i henhold til noen andre kriterier, må du være mye mer spesifikk.

Svar

Vel, du kan bruke len () funksjon, men jeg foreslår at du går og forlater språket så raskt som du har angitt det slik:

> echo -n "hello world"|python -c "import os; os.system("wc -c")"

11

Haha, nei. Louis Parkes gjorde et godt svar. Men jeg kan fortelle deg hva som skjer hvis du ringer til Python:

11263> valgrind python -c "print(len("hello world"))" 2>&1|tail -n15

==31376== HEAP SUMMARY:

==31376== in use at exit: 417,246 bytes in 199 blocks

==31376== total heap usage: 3,324 allocs, 3,125 frees, 3,807,322 bytes allocated

==31376==

==31376== LEAK SUMMARY:

==31376== definitely lost: 0 bytes in 0 blocks

==31376== indirectly lost: 0 bytes in 0 blocks

==31376== possibly lost: 528 bytes in 1 blocks

==31376== still reachable: 416,718 bytes in 198 blocks

==31376== suppressed: 0 bytes in 0 blocks

==31376== Rerun with --leak-check=full to see details of leaked memory

==31376==

==31376== For counts of detected and suppressed errors, rerun with: -v

==31376== Use --track-origins=yes to see where uninitialised values come from

==31376== ERROR SUMMARY: 529 errors from 43 contexts (suppressed: 0 from 0)

Du kommer til å kaste bort 3,8 mb RAM for å bare kalle det.

> valgrind lua5.2 -e "print(#"hello world")" 2>&1|tail -n15

==32388== Memcheck, a memory error detector

==32388== Copyright (C) 2002-2017, and GNU GPL"d, by Julian Seward et al.

==32388== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info

==32388== Command: lua5.2 -e print(#"hello\ world")

==32388==

11

==32388==

==32388== HEAP SUMMARY:

==32388== in use at exit: 0 bytes in 0 blocks

==32388== total heap usage: 305 allocs, 305 frees, 34,487 bytes allocated

==32388==

==32388== All heap blocks were freed -- no leaks are possible

==32388==

==32388== For counts of detected and suppressed errors, rerun with: -v

==32388== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

34 kb, det er en liten forskjell for å gjøre det samme. Faktor 100. Og dette blir verre og verre jo større prosjektene dine blir. Og jeg nevnte ikke størrelsen på de delte bibliotekene ennå, som er … enorme og mange som legion. Python gjør mer eller mindre det samme som LuaJIT, men det er 30 ganger tregere. Jeg ville ha brukt valgrind på LuaJIT, men det er en kjent valgrind bug som krasjer på LuaJIT, så jeg tok 5.2. Men det er ikke mye forskjell. Og jeg begynner ikke å utdype de drastiske minnelekkasjene som er offisielle i Python, og ikke om hundrevis av megabyte som blir lastet inn som systembiblioteker for det, og som vil forbli hjemmehørende i systemet ditt.

Oppstartstidene er også mye langsommere med Python, jeg snakker om en faktor på mer enn 10 ganger, noe som blir smertefullt hvis du har mange små skript som kjører i operativsystemet ditt som noe «geni» gjorde i Python og som bremser oppstartstiden med faktor 10. Jeg er ikke imponert over det, kan du forestille deg. Lær noe bedre, ikke kast bort talentet ditt på det hvis du ikke blir tvunget til å bruke det av professoren din eller læreren.

Jeg sier ikke: lær Lua. Jeg mener fungerer for meg, men jeg er ikke deg. Jeg sier bare, lær noe annet. Alt, egentlig. Bare ikke de hypede som Julia, Go, Haskell eller vade retro satanas Java. Fortsatt er alle bedre enn Python. Det er bare ett språk verre enn Python, og det ville være Ruby, som bare er litt verre enn Malbolge. Hvis et språk klarer å være tregere enn Python, er det noe alvorlig galt med det, og utviklerne driter på alt som til og med langt strekker til effektivitet. Verste kodingen noensinne på det språket, jeg aner ikke seriøst hvordan de klarte å få tingene sine så sakte, kanskje de låner ut litt av datakraften til en bitcoin-gruver i bakgrunnen? Jeg aner ikke.

Så tenk deg om to ganger.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *