Zählen von Zeichen in Python

Beste Antwort

Die Frage ist ziemlich vage. Zeichen in Python sind normalerweise enthalten und werden in Zeichenfolgen verarbeitet. Die Funktion len () (integriert) gibt die Länge der meisten Container in Python (einschließlich Zeichenfolgen) zurück. Das ist also eine Art von „Anzahl“.

Wenn Sie die Vorkommen jedes Zeichens separat zählen möchten, um beispielsweise Histogrammdaten zu generieren, können Sie ein Wörterbuch erstellen, indem Sie jedes Zeichen Ihrer Anzahl zuordnen und iterieren über die Zeichenfolgen oder den Text und aktualisieren Sie Ihre Wörterbuchwerte, während Sie gehen. Oder Sie können einfach eine Instanz der Klasse Counter für das Modul Sammlungen im Standard verwenden Bibliotheken.

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.

Instanzen der Counter-Klasse können alles zählen, was als iterable von hashbaren Objekten ausgewertet werden kann.

If Wenn Sie Zeichen auf andere Weise zählen möchten, müssen Sie nach anderen Kriterien viel spezifischer sein.

Antwort

Nun, Sie können len () verwenden. Funktion, aber ich schlage vor, Sie verlassen diese Sprache so schnell, wie Sie sie eingegeben haben:

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

11

Haha, nah. Louis Parkes hat eine gute Antwort gegeben. Aber ich kann Ihnen sagen, was passiert, wenn Sie Python aufrufen:

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)

Sie werden 3,8 MB RAM verschwenden, wenn Sie es nur aufrufen.

> 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, das ist ein „kleiner“ Unterschied, um dasselbe zu tun. Faktor 100. Und dies wird immer schlimmer, je größer Ihre Projekte werden. Und ich habe die Größe der gemeinsam genutzten Bibliotheken, die… riesig und viele als Legion sind, noch nicht erwähnt. Python macht mehr oder weniger dasselbe wie LuaJIT, ist aber 30-mal langsamer. Ich hätte Valgrind auf LuaJIT verwendet, aber es gibt einen bekannten Valgrind-Fehler, der auf LuaJIT abstürzt, also habe ich 5.2 genommen. Aber es gibt keinen großen Unterschied. Und ich werde nicht näher auf die drastischen Speicherverluste eingehen, die in Python offiziell sind, und nicht auf die Hunderte von Megabyte, die als Systembibliotheken dafür geladen werden und die in Ihrem System verbleiben.

Die Startzeiten sind bei Python auch viel langsamer. Ich spreche von einem Faktor von mehr als dem Zehnfachen, was schmerzhaft wird, wenn in Ihrem Betriebssystem viele kleine Skripte ausgeführt werden, die ein Genie in Python ausgeführt hat und die langsamer werden Die Startzeit um den Faktor 10. Ich bin davon nicht beeindruckt, können Sie sich vorstellen. Lerne etwas Besseres, verschwende dein Talent nicht damit, wenn du nicht gezwungen bist, es von deinem Professor oder Lehrer zu benutzen.

Ich sage nicht: lerne Lua. Ich meine, arbeitet für mich, aber ich bin nicht du. Ich sage nur, lerne etwas anderes. Eigentlich alles. Nur nicht die gehypten wie Julia, Go, Haskell oder Vade Retro Satanas Java. Trotzdem sind alle besser als Python. Es gibt nur eine Sprache, die schlechter ist als Python, und das wäre Ruby, was nur ein bisschen schlechter ist als Malbolge. Wenn eine Sprache langsamer als Python ist, stimmt etwas nicht und die Entwickler scheißen auf alles, was selbst von weitem nach Effizienz riecht. Ich habe ernsthaft keine Ahnung, wie sie es geschafft haben, ihre Sachen so langsam zu machen. Vielleicht verleihen sie einem Bitcoin-Miner im Hintergrund einen Teil der Rechenleistung? Ich habe keine Ahnung.

Überlegen Sie also zweimal.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.