복붙노트

[PYTHON] 파이썬에서 문자열의 반복 된 문자 계산하기

PYTHON

파이썬에서 문자열의 반복 된 문자 계산하기

각 문자가 문자열로 반복되는 횟수를 계산하고 싶습니다. A-Z의 문자열의 각 문자를 비교하는 것 외에는 특별한 방법이 있습니까? 그리고 카운터를 증가 시키는가?

업데이트 (Anthony의 답변 참조) : 지금까지 제안한 내용이 모두 26 번 작성해야합니다. 더 쉬운 방법이 있습니까?

해결법

  1. ==============================

    1.내 첫 번째 아이디어는 이렇게하는 것이었다.

    내 첫 번째 아이디어는 이렇게하는 것이었다.

    chars = "abcdefghijklmnopqrstuvwxyz"
    check_string = "i am checking this string to see how many times each character appears"
    
    for char in chars:
      count = check_string.count(char)
      if count > 1:
        print char, count
    

    그러나 이것은 좋은 생각이 아닙니다! 이것은 문자열을 26 번 스캔 할 것이므로 다른 답변보다 26 배 더 많은 작업을 수행 할 것입니다. 당신은 정말로 이것을해야합니다 :

    count = {}
    for s in check_string:
      if count.has_key(s):
        count[s] += 1
      else:
        count[s] = 1
    
    for key in count:
      if count[key] > 1:
        print key, count[key]
    

    이렇게하면 26 번 대신 한 번만 문자열을 통과 할 수 있습니다.

    또한 Alex의 대답은 훌륭한 것입니다. 저는 collections 모듈에 익숙하지 않았습니다. 나는 그것을 미래에 사용할 것이다. 그의 대답은 나의 것보다 간결하고 기술적으로 우월하다. 내 코드를 사용하는 것이 좋습니다.

  2. ==============================

    2.

    import collections
    
    d = collections.defaultdict(int)
    for c in thestring:
        d[c] += 1
    

    collections.defaultdict는 dict (실제로는 서브 클래스)와 비슷하지만 항목을 찾고 찾지 못한 경우보고하지 않고 전달한 0 인수 호출 가능 함수를 호출하여 항목을 삽입합니다. 가장 인기있는 것은 defaultdict (int), count (또는 멀티 테이블 AKA 백 데이터 구조 만들기), defaultdict (list)입니다. .setdefault (akey, [])를 사용할 필요가 없도록 영원히 남습니다. (용)과 어색한 관용구.

    그래서 이것을 한 번하면 d는 모든 문자를 나타나는 횟수만큼 매핑하는 dict-like 컨테이너입니다. 그리고 원하는대로 그것을 내보낼 수 있습니다. 예를 들어, 가장 인기있는 문자를 먼저 :

    for c in sorted(d, key=d.get, reverse=True):
      print '%s %6d' % (c, d[c])
    
  3. ==============================

    3.Python 2.7 이상에는 collections.Counter 클래스가 포함되어 있습니다.

    Python 2.7 이상에는 collections.Counter 클래스가 포함되어 있습니다.

    import collections
    results = collections.Counter(the_string)
    print(results)
    
  4. ==============================

    4.이 모듈은 추가 모듈을 가져 오지 않고도 가장 짧고 실용적인 것입니다.

    이 모듈은 추가 모듈을 가져 오지 않고도 가장 짧고 실용적인 것입니다.

    text = "hello cruel world. This is a sample text"
    d = dict.fromkeys(text, 0)
    for c in text: d[c] += 1
    

    print d [ 'a']는 2를 출력합니다.

    그리고 또한 빠릅니다.

  5. ==============================

    5.나는 "할 일이별로 없다"(이해 : 나는 많은 일을했다), 나는하기로 결심했다. 작은 공연 콘테스트. 나는 가장 분별 있고 재미있는 대답을하고 그렇게했다. 그들에 CPython 3.5.1 몇 가지 간단한 timeit. 나는 그것들을 하나의 문자열로 테스트했다. 내 경우에는 전형적인 입력이다 :

    나는 "할 일이별로 없다"(이해 : 나는 많은 일을했다), 나는하기로 결심했다. 작은 공연 콘테스트. 나는 가장 분별 있고 재미있는 대답을하고 그렇게했다. 그들에 CPython 3.5.1 몇 가지 간단한 timeit. 나는 그것들을 하나의 문자열로 테스트했다. 내 경우에는 전형적인 입력이다 :

    >>> s = 'ZDXMZKMXFDKXZFKZ'
    >>> len(s)
    16
    

    결과는 입력에 따라 다를 수 있으며 문자열의 길이가 다르거 나 다른 문자 수 또는 문자 당 평균 발생 수가 다릅니다.

    파이썬은 우리에게 간단하게 만들었습니다. collections.Counter 클래스는 우리가 원하는 것을 정확하게 수행합니다. 그리고 훨씬 더. 그것의 사용법은 여기에 언급 된 모든 방법 중에서 훨씬 간단합니다.

    @oefe에서 가져온, 멋진 찾기

    >>> timeit('Counter(s)', globals=locals())
    8.208566107001388
    

    카운터는 여분의 마일을 차지합니다. 그래서 오래 걸립니다.

    대신 간단한 dict를 사용해 봅시다. 먼저, 선언적으로 해보자. 이해.

    나는 내 자신을 생각해 냈다.

    >>> timeit('{c: s.count(c) for c in s}', globals=locals())
    4.551155784000002
    

    이것은 처음부터 끝까지 s를 거치며 각 문자에 대해 숫자를 계산합니다. 그것들의 발생의 s. s에는 중복 문자가 들어 있으므로 위의 메소드는 동일한 문자에 대해 여러 번. 결과는 자연적으로 항상 동일합니다. 그래서 계산 해 봅시다. 각 문자에 대해 단 한번의 발생 횟수.

    나는 나 자신을 생각해 냈고, @ IrshadBhat도 그러했다.

  6. ==============================

    6.당신은 딕트를 사용하고 싶습니다.

    당신은 딕트를 사용하고 싶습니다.

    #!/usr/bin/env python
    
    input = "this is a string"
    
    d = {}
    
    for c in input:
        try:
            d[c] += 1
        except:
            d[c] = 1
    
    for k in d.keys():
        print "%s: %d" % (k, d[k])
    
  7. ==============================

    7.누군가가 collections 모듈없이 가장 간단한 방법을 찾고 있다면. 나는 이것이 도움이 될 것 같아요 :

    누군가가 collections 모듈없이 가장 간단한 방법을 찾고 있다면. 나는 이것이 도움이 될 것 같아요 :

    >>> s = "asldaksldkalskdla"
    >>> {i:s.count(i) for i in set(s)}
    {'a': 4, 'd': 3, 'k': 3, 's': 3, 'l': 4}
    

    또는

    >>> [(i,s.count(i)) for i in set(s)]
    [('a', 4), ('k', 3), ('s', 3), ('l', 4), ('d', 3)]
    
  8. ==============================

    8.사전을 사용할 수 있습니다.

    사전을 사용할 수 있습니다.

    s = "asldaksldkalskdla"
    dict = {}
    for letter in s:
     if letter not in dict.keys():
      dict[letter] = 1
     else:
      dict[letter] += 1
    
    print dict
    
  9. ==============================

    9.나는 내 양손에 파이썬을 알고있는 날 수를 셀 수있다. 어리석은 답을하면 나를 용서해라. :)

    나는 내 양손에 파이썬을 알고있는 날 수를 셀 수있다. 어리석은 답을하면 나를 용서해라. :)

    사전을 사용하는 대신 목록을 사용하지 않는 이유를 생각했습니다. 목록과 사전이 파이썬에서 어떻게 구현되는지 잘 모르겠습니다. 그래서 이것은 무엇이 더 빠른지를 알기 위해 측정되어야 할 것입니다.

    이 C ++ 경우 그냥 정상적인 c- 배열 / 벡터 상수 시간 액세스 (확실히 빠른 것입니다) 사용할 것이라고하지만 해당 데이터 형식을 파이썬에서 무엇인지 모르겠다 (하나 있다면 ...) :

    count = [0 for i in range(26)]
    
    for c in ''.join(s.lower().split()): # get rid of whitespaces and capital letters
        count[ord(c) - 97] += 1          # ord('a') == 97
    

    또한 목록의 크기를 ord ( 'z')로 만들 수 있으며 모든 부분에서 97 빼기를 제거 할 수 있습니다. 그러나 최적화하는 경우 왜 모든 방법을 사용할 수 있습니까? :)

    편집하다: 댓글 작성자는 가입 / 분할이 목록을 사용할 수있는 가치가 없다고 제안 했으므로 제거하지 않는 것이 좋습니다.

    count = [0 for i in range(26)]
    
    for c in s:
        if c.isalpha(): count[ord(c.lower()) - 97] += 1
    
  10. ==============================

    10.

    dict = {}
    for i in set(str):
        b = str.count(i, 0, len(str))
        dict[i] = b
    print dict
    

    내 문자열이 :

    str = "this is string!"
    

    위 코드가 인쇄됩니다.

    {'!': 1, ' ': 2, 'g': 1, 'i': 3, 'h': 1, 'n': 1, 's': 3, 'r': 1, 't': 2}
    
  11. ==============================

    11.이것은 발생 카운트가있는 문자의 사전을 보여줍니다.

    이것은 발생 카운트가있는 문자의 사전을 보여줍니다.

    str = 'aabcdefghijklmnopqrstuvwxyz'
    mydict = {}
    for char in str:
        mydict[char]=mydict.get(char,0)+1
     print mydict
    
  12. ==============================

    12.주어진 문자열에서 주어진 문자의 반복 횟수를 세는 것만 큼 문제가 있다면, 이와 같은 것을 시도해보십시오.

    주어진 문자열에서 주어진 문자의 반복 횟수를 세는 것만 큼 문제가 있다면, 이와 같은 것을 시도해보십시오.

  13. ==============================

    13.여기 솔루션입니다 ..

    여기 솔루션입니다 ..

    my_list=[]
    history=""
    history_count=0
    my_str="happppyyyy"
    
    
    for letter in my_str:
        if letter in history:
            my_list.remove((history,history_count))
            history=letter
            history_count+=1
    
        else:
            history_count=0
            history_count+=1
            history=letter
    
    
    my_list.append((history,history_count))    
    
    
    print my_list
    
  14. ==============================

    14.아래 코드는 다른 Python 라이브러리를 찾지 않고 저에게 도움이되었습니다.

    아래 코드는 다른 Python 라이브러리를 찾지 않고 저에게 도움이되었습니다.

    def count_repeated_letter(string1):
        list1=[]
    
        for letter in string1:
            if string1.count(letter)>=2:
                if letter not in list1:
                    list1.append(letter)
    
    
        for item in list1:
            if item!= " ":
                print(item,string1.count(item))
    
    
    count_repeated_letter('letter has 1 e and 2 e and 1 t and two t')
    

    산출:

    e 4
    t 5
    a 4
    1 2
    n 3
    d 3
    
  15. ==============================

    15.문자열의 문자를 계산하려면 YOUR_VARİABLE.count ( 'WHAT_YOU_WANT_TO_COUNT')를 사용해야합니다.

    문자열의 문자를 계산하려면 YOUR_VARİABLE.count ( 'WHAT_YOU_WANT_TO_COUNT')를 사용해야합니다.

    요약이 필요한 경우 count () 함수를 사용해야합니다.

    variable = 'turkiye'
    print(variable.count('u'))
    

    산출:     1

  16. from https://stackoverflow.com/questions/991350/counting-repeated-characters-in-a-string-in-python by cc-by-sa and MIT license