programing

문자열에서 문자의 발생 수를 계산합니다.

nasanasas 2020. 9. 28. 09:17
반응형

문자열에서 문자의 발생 수를 계산합니다.


문자열에서 문자의 발생 횟수를 계산하는 가장 간단한 방법은 무엇입니까?

예 :에 'a'나타나는 횟수를 계산'Mary had a little lamb'


str.count (sub [, start [, end]])

sub범위에서 부분 문자열이 겹치지 않는 횟수를 반환합니다 [start, end]. 선택적 인수 start이며 end슬라이스 표기법으로 해석됩니다.

>>> sentence = 'Mary had a little lamb'
>>> sentence.count('a')
4

count () 사용할 수 있습니다 .

>>> 'Mary had a little lamb'.count('a')
4

다른 답변에서 말했듯이 문자열 메서드 count ()를 사용하는 것이 아마도 가장 간단하지만 자주 수행하는 경우 collections.Counter를 확인하십시오 .

from collections import Counter
my_str = "Mary had a little lamb"
counter = Counter(my_str)
print counter['a']

정규 표현식일까요?

import re
my_string = "Mary had a little lamb"
len(re.findall("a", my_string))

myString.count('a');

여기에 더 많은 정보


"aabc".count("a")

str.count(a)문자열에서 단일 문자를 계산하는 가장 좋은 솔루션입니다. 그러나 더 많은 문자를 계산해야하는 경우 계산하려는 문자 수만큼 전체 문자열을 읽어야합니다.

이 작업에 대한 더 나은 접근 방식은 다음과 같습니다.

from collections import defaultdict

text = 'Mary had a little lamb'
chars = defaultdict(int)

for char in text:
    chars[char] += 1

따라서 문자열에있는 모든 문자의 발생 횟수와 0존재하지 않는 경우 를 반환하는 사전이 있습니다.

>>>chars['a']
4
>>>chars['x']
0

대소 문자를 구분하지 않는 카운터의 경우 하위 클래스를 지정하여 mutator 및 접근 자 메서드를 재정의 할 수 있습니다 defaultdict(기본 클래스의 메서드 는 읽기 전용 임).

class CICounter(defaultdict):
    def __getitem__(self, k):
        return super().__getitem__(k.lower())

    def __setitem__(self, k, v):
        super().__setitem__(k.lower(), v)


chars = CICounter(int)

for char in text:
    chars[char] += 1

>>>chars['a']
4
>>>chars['M']
2
>>>chars['x']
0

정규식은 대소 문자를 구분하지 않으려는 경우 매우 유용합니다 (물론 정규식의 모든 기능).

my_string = "Mary had a little lamb"
# simplest solution, using count, is case-sensitive
my_string.count("m")   # yields 1
import re
# case-sensitive with regex
len(re.findall("m", my_string))
# three ways to get case insensitivity - all yield 2
len(re.findall("(?i)m", my_string))
len(re.findall("m|M", my_string))
len(re.findall(re.compile("m",re.IGNORECASE), my_string))

정규식 버전은 실행 시간이 10 배 정도 소요됩니다. 이는 my_string이 엄청나게 길거나 코드가 깊은 루프 내에있는 경우에만 문제가 될 수 있습니다.


This easy and straight forward function might help:

def check_freq(str):
    freq = {}
    for c in str:
       freq[c] = str.count(c)
    return freq

check_freq("abbabcbdbabdbdbabababcbcbab")
{'a': 7, 'b': 14, 'c': 3, 'd': 3}

a = 'have a nice day'
symbol = 'abcdefghijklmnopqrstuvwxyz'
for key in symbol:
    print key, a.count(key)

str = "count a character occurance"

List = list(str)
print (List)
Uniq = set(List)
print (Uniq)

for key in Uniq:
    print (key, str.count(key))

An alternative way to get all the character counts without using Counter(), count and regex

counts_dict = {}
for c in list(sentence):
  if c not in counts_dict:
    counts_dict[c] = 0
  counts_dict[c] += 1

for key, value in counts_dict.items():
    print(key, value)

count is definitely the most concise and efficient way of counting the occurrence of a character in a string but I tried to come up with a solution using lambda, something like this :

sentence = 'Mary had a little lamb'
sum(map(lambda x : 1 if 'a' in x else 0, sentence))

This will result in :

4

Also, there is one more advantage to this is if the sentence is a list of sub-strings containing same characters as above, then also this gives the correct result because of the use of in. Have a look :

sentence = ['M', 'ar', 'y', 'had', 'a', 'little', 'l', 'am', 'b']
sum(map(lambda x : 1 if 'a' in x else 0, sentence))

This also results in :

4

But Of-course this will work only when checking occurrence of single character such as 'a' in this particular case.


"Without using count to find you want character in string" method.

import re

def count(s, ch):

   pass

def main():

   s = raw_input ("Enter strings what you like, for example, 'welcome': ")  

   ch = raw_input ("Enter you want count characters, but best result to find one character: " )

   print ( len (re.findall ( ch, s ) ) )

main()

spam = 'have a nice day'
var = 'd'


def count(spam, var):
    found = 0
    for key in spam:
        if key == var:
            found += 1
    return found
count(spam, var)
print 'count %s is: %s ' %(var, count(spam, var))

No more than this IMHO - you can add the upper or lower methods

def count_letter_in_str(string,letter):
    return string.count(letter)

Python 3

Ther are two ways to achieve this:

1) With built-in function count()

sentence = 'Mary had a little lamb'
print(sentence.count('a'))`

2) Without using a function

sentence = 'Mary had a little lamb'    
count = 0

for i in sentence:
    if i == "a":
        count = count + 1

print(count)

Using Count:

string = "count the number of counts in string to count from."
x = string.count("count")

x = 3.


This will give you the occurrence of each characters in a string. O/P is also in string format:

def count_char(string1):
string2=""
lst=[]
lst1=[]
for i in string1:
    count=0
    if i not in lst:
        for j in string1:
            if i==j:
                count+=1
        lst1.append(i)
        lst1.append(count)
    lst.append(i)

string2=''.join(str(x) for x in lst1)
return string2 

print count_char("aabbacddaabbdsrchhdsdg")

참고URL : https://stackoverflow.com/questions/1155617/count-the-number-occurrences-of-a-character-in-a-string

반응형