Comment compter les caractères en Python

Meilleure réponse

La question est assez vague. Les caractères, en Python, sont normalement contenus et traités dans des chaînes. La fonction len () (intégrée) renvoie la longueur de la plupart des conteneurs en Python (y compris les chaînes). Cest donc une sorte de «décompte».

Si vous souhaitez compter les occurrences de chaque caractère séparément, pour générer des données dhistogramme, par exemple, vous pouvez créer un dictionnaire, mappant chaque caractère à votre décompte, itération sur les chaînes ou le texte et mettre à jour les valeurs de votre dictionnaire au fur et à mesure. Ou vous pouvez simplement utiliser une instance de la classe Counter pour le module collections dans le module standard bibliothèques.

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.

Les instances de la classe Counter peuvent compter tout ce qui peut être évalué comme un itérable dobjets hachables.

Si vous voulez compter les caractères dune autre manière, selon dautres critères, vous devrez être beaucoup plus précis.

Réponse

Eh bien, vous pouvez utiliser le len () mais je vous suggère de quitter cette langue aussi vite que vous lavez saisie comme ceci:

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

11

Haha, non. Louis Parkes a fait une bonne réponse. Mais je peux vous dire ce qui se passe si vous appelez 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)

Vous allez gaspiller 3,8 Mo de RAM pour simplement lappeler.

> 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 ko, cest une légère différence pour faire de même. Facteur 100. Et cela saggrave à mesure que vos projets deviendront plus grands. Et je n’ai pas encore mentionné la taille des bibliothèques partagées, qui sont… énormes et nombreuses comme légion. Python fait plus ou moins la même chose que LuaJIT mais il est 30 fois plus lent. Jaurais utilisé valgrind sur LuaJIT mais il y a un bogue valgrind connu qui plante sur LuaJIT, jai donc pris la version 5.2. Mais il ny a pas beaucoup de différence. Et je ne commence pas à métendre sur les fuites de mémoire drastiques qui sont officielles en Python et non sur les centaines de mégaoctets qui sont chargés en tant que bibliothèques système pour cela et qui resteront résidentes dans votre système.

Les temps de démarrage sont également beaucoup plus lents avec Python, je parle dun facteur de plus de 10 fois, ce qui devient pénible si vous avez beaucoup de petits scripts en cours dexécution dans votre OS que certains «  génie ont fait en Python et qui ralentissent le temps de démarrage par facteur 10. Je ne suis pas impressionné par cela, vous pouvez limaginer. Apprenez quelque chose de mieux, ne gaspillez pas votre talent là-dessus si vous nêtes pas obligé de lutiliser par votre professeur ou professeur.

Je ne dis pas: apprenez Lua. Je veux dire ça marche pour moi, mais je ne suis pas toi. Je dis juste, apprends autre chose. Rien? Vraiment. Mais pas les hyped comme Julia, Go, Haskell ou vade retro satanas Java. Pourtant, tous sont meilleurs que Python. Il ny a quun seul langage pire que Python et ce serait Ruby, qui nest quun peu pire que Malbolge. Si un langage parvient à être plus lent que Python, il y a quelque chose qui ne va vraiment pas et les développeurs chient sur tout ce qui, même de loin, sent lefficacité. Le pire codage de tous les temps dans ce langage, je nai vraiment aucune idée de la façon dont ils ont réussi à ralentir si longtemps leurs trucs, peut-être quils prêtent une partie de la puissance de calcul à un mineur de bitcoin en arrière-plan? Je nai aucune idée.

Alors réfléchissez à deux fois.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *