it-swarm.com.de

Zählen Sie die Anzahl der Vorkommen eines Zeichens in einer Zeichenfolge

Wie lässt sich die Anzahl der Vorkommen eines Zeichens in einer Zeichenfolge am einfachsten zählen?

z.B. Zählen Sie, wie oft 'a' in 'Mary had a little lamb' angezeigt wird.

809
Mat

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

Gibt die Anzahl der nicht überlappenden Vorkommen der Teilzeichenfolge sub im Bereich [start, end] zurück. Optionale Argumente start und end werden als Slice-Notation interpretiert.

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

Sie können count () verwenden:

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

Wie andere Antworten sagten, ist die Verwendung der String-Methode count () wahrscheinlich die einfachste, aber wenn Sie dies häufig tun, sollten Sie collection.Counter :

from collections import Counter
str = "Mary had a little lamb"
counter = Counter(str)
print counter['a']
89
Brenden Brown

Reguläre Ausdrücke vielleicht?

import re
my_string = "Mary had a little lamb"
len(re.findall("a", my_string))
46
Sinan Taifour
myString.count('a');

mehr Infos hier

23
Finer Recliner
"aabc".count("a")
14
Aaron Fi

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

Ein besserer Ansatz für diesen Job wäre:

from collections import defaultdict

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

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

Sie haben also ein Dikt, das die Anzahl der Vorkommen jedes Buchstabens in der Zeichenfolge und 0 zurückgibt, falls er nicht vorhanden ist.

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

Für einen Zähler, bei dem die Groß-/Kleinschreibung nicht beachtet wird, können Sie die Mutator- und Accessor-Methoden überschreiben, indem Sie defaultdict (die Klassen der Basisklasse sind schreibgeschützt) überschreiben:

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
10
Nuno André

Reguläre Ausdrücke sind sehr nützlich, wenn Sie die Groß- und Kleinschreibung nicht berücksichtigen wollen (und natürlich die ganze 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 zehnmal so lange dauert, bis sie ausgeführt wird. Dies ist wahrscheinlich nur dann ein Problem, wenn my_string enorm lang ist oder der Code in einer tiefen Schleife liegt.

8
jafelds

Diese einfache und unkomplizierte Funktion kann helfen:

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}
6
Erick Mwazonga
a = 'have a Nice day'
symbol = 'abcdefghijklmnopqrstuvwxyz'
for key in symbol:
    print key, a.count(key)
5
rookie

countist definitiv die präziseste und effizienteste Methode, um das Auftreten eines Zeichens in einer Zeichenfolge zu zählen, aber ich habe versucht, eine Lösung zu finden, dielambdaverwendet.

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

Dies führt zu:

4

Ein weiterer Vorteil besteht darin, dass es sich bei dem Satz um eine Liste von Unterzeichenfolgen handelt, die die gleichen Zeichen wie oben enthalten. Dann ergibt dies auch das korrekte Ergebnis aufgrund der Verwendung von in. Guck mal :

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

Dies funktioniert natürlich nur, wenn in diesem Fall das Auftreten einzelner Zeichen wie 'a' geprüft wird.

2
Satish Garg
str = "count a character occurance"

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

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

Msgstr "Ohne Zählwert zum Suchen nach Zeichen in Zeichenfolge".

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()
1
B-Y
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
rookie

Eine alternative Methode, um alle Zeichenanzahlen abzurufen, ohne Counter(), count und regex zu verwenden

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 verwenden: 

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

x = 3.

0
Carlson Bimbuh

Nicht mehr als diese IMHO - Sie können die oberen oder unteren Methoden hinzufügen

def count_letter_in_str(string,letter):
    return string.count(letter)
0
Tim Seed