Legjobb válasz
A kérdés meglehetősen homályos. A Pythonban szereplő karakterek általában karakterláncokban vannak és feldolgozódnak. Az len () függvény (beépített) a Python bármely tárolójának (beleértve a karakterláncokat is) hosszát adja vissza. Tehát ez egyfajta „számlálás”.
Ha az egyes karakterek előfordulásait külön-külön szeretné megszámolni, például hisztogramadatok létrehozásához, akkor összeállíthat egy szótárat, hozzárendelve az egyes karaktereket a számához, iterálva a karakterláncok vagy a szöveg fölött, és frissíti a szótár értékeit menet közben. Vagy használhatja a Számláló osztály egy példányát a standard gyűjtemények modulhoz könyvtárak.
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.
A Counter osztály példányai bármit megszámolhatnak, ami értékelhető a hashable objektumok iterálhatójaként.
Ha a karakterek valamilyen más módon történő megszámolására, más kritériumok alapján sokkal konkrétabbra kell, hogy mondd.
Válasz
Nos, használhatod a len () funkciót, de azt javaslom, menjen el, és hagyja el ezt a nyelvet, amilyen gyorsan ezt beírta:
> echo -n "hello world"|python -c "import os; os.system("wc -c")"
11
Haha, hát. Louis Parkes jó választ adott. De elmondhatom, mi történik, ha felhívja a Pythont:
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)
3,8 MB RAM-ot pazarol, mert csak hívta.
> 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, ez „enyhe” különbség ugyanannak a végrehajtásához. 100. faktor. És ez egyre rosszabb, minél nagyobbak lesznek a projektjei. És még nem említettem a megosztott könyvtárak méretét, amelyek… hatalmasak és sokak légiósként. A Python nagyjából ugyanazt csinálja, mint a LuaJIT, de 30-szor lassabb. A valgrind-et használtam volna a LuaJIT-en, de van egy ismert valgrind-hiba, amely összeomlik a LuaJIT-en, ezért az 5.2-et vettem. De nincs sok különbség. És nem kezdem el részletezni azokat a drasztikus memóriaszivárgásokat, amelyek hivatalosak a Pythonban, és nem arról a megabájtok százairól, amelyek erre rendszerkönyvtárakként kerülnek betöltésre, és amelyek továbbra is rezidensek maradnak a rendszerben.
Az indítási idők a Python esetében is sokkal lassabbak, 10-szeres tényezőről beszélek, ami fájdalmas lesz, ha sok kicsi szkript fut az operációs rendszeredben, amit néhány zseni tett a Pythonban, és amelyek lelassulnak az indítási idő 10-szeresére. Ez engem nem hat meg, elképzelheted. Tanuljon meg valami jobbat, ne pazarolja erre tehetségét, ha professzora vagy tanára nem kényszeríti rá.
Nem mondom: tanulja meg Lua-t. Mármint nekem dolgozik, de nem én vagyok. Csak azt mondom, tanulj meg mást. Bármi, tényleg. Csak nem azok a hipederek, mint Julia, Go, Haskell vagy a Vade retro satanas Java. Mégis mindegyik jobb, mint a Python. Csak egy nyelv van rosszabb, mint a Python, és ez a Ruby lenne, ami csak egy kicsit rosszabb, mint a Malbolge. Ha egy nyelv képes lassabban működni, mint a Python, akkor abban valami komoly baj van, és a fejlesztők mindent elcsesznek, ami még a távolból is szereti a hatékonyságot. A legrosszabb kódolás ezen a nyelven, komolyan nem is sejtem, hogyan sikerült ilyen lassan megszerezni a cuccaikat, esetleg kölcsönadják a számítási teljesítmény egy részét a háttérben lévő bitcoin bányászoknak? Fogalmam sincs.
Tehát gondold át kétszer.