[PYTHON] 파이썬에서 문자열의 반복 된 문자 계산하기
PYTHON파이썬에서 문자열의 반복 된 문자 계산하기
각 문자가 문자열로 반복되는 횟수를 계산하고 싶습니다. A-Z의 문자열의 각 문자를 비교하는 것 외에는 특별한 방법이 있습니까? 그리고 카운터를 증가 시키는가?
업데이트 (Anthony의 답변 참조) : 지금까지 제안한 내용이 모두 26 번 작성해야합니다. 더 쉬운 방법이 있습니까?
해결법
-
==============================
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.
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.Python 2.7 이상에는 collections.Counter 클래스가 포함되어 있습니다.
Python 2.7 이상에는 collections.Counter 클래스가 포함되어 있습니다.
import collections results = collections.Counter(the_string) print(results)
-
==============================
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.나는 "할 일이별로 없다"(이해 : 나는 많은 일을했다), 나는하기로 결심했다. 작은 공연 콘테스트. 나는 가장 분별 있고 재미있는 대답을하고 그렇게했다. 그들에 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.당신은 딕트를 사용하고 싶습니다.
당신은 딕트를 사용하고 싶습니다.
#!/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.누군가가 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.사전을 사용할 수 있습니다.
사전을 사용할 수 있습니다.
s = "asldaksldkalskdla" dict = {} for letter in s: if letter not in dict.keys(): dict[letter] = 1 else: dict[letter] += 1 print dict
-
==============================
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.
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.이것은 발생 카운트가있는 문자의 사전을 보여줍니다.
이것은 발생 카운트가있는 문자의 사전을 보여줍니다.
str = 'aabcdefghijklmnopqrstuvwxyz' mydict = {} for char in str: mydict[char]=mydict.get(char,0)+1 print mydict
-
==============================
12.주어진 문자열에서 주어진 문자의 반복 횟수를 세는 것만 큼 문제가 있다면, 이와 같은 것을 시도해보십시오.
주어진 문자열에서 주어진 문자의 반복 횟수를 세는 것만 큼 문제가 있다면, 이와 같은 것을 시도해보십시오.
-
==============================
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.아래 코드는 다른 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.문자열의 문자를 계산하려면 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
from https://stackoverflow.com/questions/991350/counting-repeated-characters-in-a-string-in-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬 또는 ipython 인터프리터를 입력 할 때 모듈을 자동으로 가져옵니다. (0) | 2018.10.03 |
---|---|
[PYTHON] 파이썬에서 round ()가 제대로 반올림되지 않는 것 같습니다. (0) | 2018.10.03 |
[PYTHON] 파이썬 속성은 어떻게 작동합니까? (0) | 2018.10.03 |
[PYTHON] 파이썬에서리스트에서 중복을 제거하는 가장 빠른 알고리즘은 무엇입니까? 그래서 모든 요소가 순차적으로 * 보존됩니다 *. [복제] (0) | 2018.10.03 |
[PYTHON] 파이썬에서 XML 문자열을 사전으로 변환하는 방법은 무엇입니까? (0) | 2018.10.03 |