Python에서 문자 수를 세는 방법


정답

질문은 다소 모호합니다. Python에서 문자는 일반적으로 포함되고 문자열로 처리됩니다. len () 함수 (내장)는 Python에있는 대부분의 컨테이너 (문자열 포함)의 길이를 반환합니다. 예를 들어 히스토그램 데이터를 생성하기 위해 각 문자의 발생 횟수를 개별적으로 계산하려면 사전을 구축하여 각 문자를 개수에 매핑하여 반복 할 수 있습니다.

문자열 또는 텍스트를 통해 사전 값을 업데이트합니다. 또는 표준의 컬렉션 모듈에 대해 Counter 클래스의 인스턴스를 사용할 수 있습니다. 라이브러리.

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.

Counter 클래스의 인스턴스는 해시 가능한 객체의 반복 가능한 것으로 평가 될 수있는 모든 것을 계산할 수 있습니다.

If 다른 기준에 따라 다른 방식으로 문자를 세는 것을 의미합니다. 훨씬 더 구체적이어야합니다.

Answer

글쎄, len ()을 사용할 수 있습니다. 함수를 사용하지만 다음과 같이 입력 한대로 해당 언어를 빨리 남겨 두는 것이 좋습니다.

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

11

하하, 아니. Louis Parkes가 좋은 대답을했습니다. 하지만 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)

단순히 호출하는 데 3.8MB RAM을 낭비하게됩니다.

> 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)

34kb는 동일한 작업을 수행하기위한 약간차이입니다. Factor 100. 그리고 이것은 당신의 프로젝트가 더 커질수록 점점 더 나 빠지고 있습니다. 그리고 저는 아직 공유 라이브러리의 크기에 대해 언급하지 않았습니다. 그 규모는… Python은 LuaJIT와 거의 비슷하지만 30 배 더 느립니다. LuaJIT에서 valgrind를 사용했지만 LuaJIT에서 충돌하는 알려진 valgrind 버그가 있으므로 5.2를 사용했습니다. 그러나 큰 차이는 없습니다. 그리고 저는 파이썬에서 공식적인 엄청난 메모리 누수에 대해 자세히 설명하지 않을 것입니다. 시스템 라이브러리로로드되어 시스템에 상주하게 될 수백 메가 바이트 정도가 아닙니다.

Python에서는 시작 시간도 훨씬 느립니다. 저는 10 배 이상의 요인에 대해 이야기하고 있습니다. 이는 일부 천재가 Python에서 수행 한 작은 스크립트가 OS에서 실행되고 속도가 느려지면 고통스러워집니다. 팩터 10에 의한 부팅 시간입니다. 나는 그것에 감동하지 않습니다. 당신은 상상할 수 있습니다. 더 나은 것을 배우고, 교수 나 선생님이 강요하지 않는다면 재능을 낭비하지 마세요.

나는 말하지 않습니다. Lua를 배우세요. 내 말은 나를 위해 일하지만 나는 당신이 아닙니다. 나는 단지 다른 것을 배우라고 말합니다. 정말 뭐든지 요. Julia, Go, Haskell 또는 vade retro satanas Java와 같은 과대 광고는 아닙니다. 여전히 그들 모두는 파이썬보다 낫습니다. 파이썬보다 더 나쁜 언어는 단 하나 뿐이고 그것은 Malbolge보다 조금 더 나쁜 Ruby 일 것입니다. 언어가 파이썬보다 느리면, 그것에 대해 심각한 문제가 있으며 개발자는 효율성과 같은 먼 악취를 가진 모든 것에 대해 똥을 씁니다. 그 언어로 된 최악의 코딩, 나는 그들이 어떻게 자신의 물건을 그렇게 느리게 만들 수 있었는지 진지하게 알지 못합니다. 아마도 백그라운드에서 비트 코인 채굴 자에게 컴퓨팅 능력의 일부를 빌려줄까요? 잘 모르겠습니다.

두 번 생각해보세요.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다