2009-07-20 14 views

Antwort

920

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

Gibt die Anzahl der nicht überlappenden Vorkommen von Teilzeichen sub im Bereich [start, end]. Die optionalen Argumente start und end werden als Slice-Notation interpretiert.

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

string.count! Das ist super bequem – peterb

43

Reguläre Ausdrücke vielleicht?

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

Eine gute Idee, aber in diesem Fall zu viel. Die String-Methode "count" macht dasselbe mit dem zusätzlichen Vorteil, dass sie sofort offensichtlich ist, was sie tut. – nilamo

+15

Warum negative Rate, vielleicht braucht jemand diese Art von Code für etwas Ähnliches. meine stimme up – kiltek

+2

stimme mit kiltek überein - das ist nur der allgemeinere fall ... –

109

können Sie verwenden count():

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

weitere Informationen here

14
"aabc".count("a") 
77

Wie andere Antworten gesagt, die String-Methode count() ist wahrscheinlich die einfachste , aber wenn du das häufig tust, check out collections.Counter:

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

Warum ist das besser, wenn es häufig benutzt wird? Was ist der Vorteil? – meshy

+9

Wenn Sie die Anzahl für eine große Anzahl von Buchstaben in einer gegebenen Zeichenfolge festlegen möchten, bietet Counter ihnen alle in einer prägnanteren Form an. Wenn Sie die Anzahl für einen Buchstaben aus vielen verschiedenen Zeichenfolgen ermitteln möchten, bietet Counter keinen Vorteil. –

+0

@BrendenBrown Gibt es einen bemerkenswerten Leistungsunterschied? –

8

Reguläre Ausdrücke sind sehr nützlich, wenn Sie Fall-Unempfindlichkeit wollen (und natürlich alle die Kraft des regex).

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

Beachten Sie, dass die Regex-Version in der Größenordnung von zehn mal so lange laufen dauert, die wahrscheinlich ein Problem wird nur dann, wenn my_string enorm lang ist, oder der Code ist in einer tiefen Schleife.

+0

Regex ist übertrieben, wenn Sie nur versuchen, die Groß-/Kleinschreibung zu korrigieren. my_sting.lower(). count ('m') ist performanter, klarer und prägnanter. –

2

"Ohne Verwendung der Anzahl zu finden, Sie wollen Zeichen in String" -Methode.

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() 
+4

Warum funktioniert die Leerzählung? Warum die main() -Funktion?Warum die hässlichen Räume überall? Das ist KEINE gute Antwort. – bugmenot123

3
a = 'have a nice day' 
symbol = 'abcdefghijklmnopqrstuvwxyz' 
for key in symbol: 
    print key, a.count(key) 
0
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)) 
0

nicht mehr als dieses IMHO - können Sie die obere oder untere Methoden hinzufügen

def count_letter_in_str(string,letter): 
    return string.count(letter) 
2
str = "count a character occurance" 

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

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

str.count(a) ist die beste Lösung, um ein einzelnes Zeichen in einer Zeichenfolge zu zählen . Wenn Sie jedoch mehr Zeichen als eins zählen müssen, müssen Sie die Zeichenfolge so oft wie die Zeichen zählen, die Sie zählen möchten.

wäre ein besserer Ansatz für diesen Job sein:

from collections import defaultdict 

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

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

So finden Sie eine dict haben, die die Anzahl der ocurrences von jedem Buchstaben in der Zeichenkette und 0 zurück, wenn es nicht vorhanden ist.

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

Sie implementieren grundsätzlich 'Counter', was bereits eine Klasse in' Sammlungen' ist. – merv

+0

@merv Nicht wirklich. 'Counter' ist eine aufgeblähte reine Python-Klasse und' defaultdict' '' __missing__' ist [in C geschrieben] (https://hg.python.org/cpython/file/7272ef213b7c/Modules/_collectionsmodule.c#l1484) . Für eine einfache Aufgabe wie diese ("int" ist auch in C implementiert) ist dieser Ansatz etwas schneller. –

-1

Dies gibt Ihnen das Auftreten von jedem Zeichen in einer Zeichenfolge.O/P ist auch im 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") 
1

count ist definitiv die präzise und effiziente Art und Weise das Vorkommen eines Zeichens in einer Zeichenfolge zu zählen, aber ich versuchte, mit einer Lösung zu kommen mit lambda , so etwas wie dieses:

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

Dies wird zur Folge haben:

4 

Es gibt noch einen weiteren Vorteil, wenn der Satz eine Liste von Teilzeichenfolgen ist, die die gleichen Zeichen wie oben enthalten, dann gibt dies auch das richtige Ergebnis, da in verwendet wird. Werfen Sie einen Blick:

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

Dies führt auch zu:

4 

Aber Of-Kurs wird dies nur funktionieren, wenn das Auftreten von Einzelzeichen wie 'a' in diesem speziellen Fall zu prüfen.

Verwandte Themen