Antworten:
str.count (sub [, start [, end]])
Gibt die Anzahl der nicht überlappenden Vorkommen von Teilzeichenfolgen
sub
im Bereich zurück[start, end]
. Optionale Argumentestart
undend
werden wie in Slice-Notation interpretiert.
>>> sentence = 'Mary had a little lamb'
>>> sentence.count('a')
4
Sie können count () verwenden :
>>> 'Mary had a little lamb'.count('a')
4
Wie andere Antworten bereits sagten, ist die Verwendung der Zeichenfolgenmethode count () wahrscheinlich die einfachste. Wenn Sie dies jedoch häufig tun, lesen Sie die Sammlungen. Counter :
from collections import Counter
my_str = "Mary had a little lamb"
counter = Counter(my_str)
print counter['a']
Reguläre Ausdrücke vielleicht?
import re
my_string = "Mary had a little lamb"
len(re.findall("a", my_string))
len(re.findall('1',bin(10)))
myString.count('a');
Mehr Infos hier
Python-3.x:
"aabc".count("a")
str.count (sub [, start [, end]])
Geben Sie die Anzahl der nicht überlappenden Vorkommen von Teilzeichenfolgen im Bereich [Start, Ende] zurück. Optionale Argumente start und end werden wie in der Slice-Notation interpretiert.
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 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 Diktat, das die Anzahl der Vorkommen jedes Buchstabens in der Zeichenfolge zurückgibt und 0
falls dieser nicht vorhanden ist.
>>>chars['a']
4
>>>chars['x']
0
Bei einem Zähler ohne Berücksichtigung der Groß- und Kleinschreibung können Sie die Mutator- und Accessor-Methoden durch Unterklassen überschreiben defaultdict
(die Basisklassen sind schreibgeschützt):
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
Counter
, was bereits eine Klasse ist collections
.
Counter
ist eine mehr aufgebläht reine Python - Klasse und defaultdict
‚s __missing__
ist in C geschrieben . Für eine einfache Aufgabe wie diese ( int
wird auch in C implementiert) ist dieser Ansatz etwas schneller.
Diese einfache und unkomplizierte Funktion könnte helfen:
def check_freq(x):
freq = {}
for c in x:
freq[c] = str.count(c)
return freq
check_freq("abbabcbdbabdbdbabababcbcbab")
{'a': 7, 'b': 14, 'c': 3, 'd': 3}
str
. Wenn Sie der Variablen ihren Namen geben, str
handelt es sich nicht mehr um einen integrierten Typ. Außerdem zählst du vierzehn Mal vierzehn b. Sie können das einfach vermeiden , indem Sie for c in text
mit for c in set(text)
.
Reguläre Ausdrücke sind sehr nützlich, wenn Sie die Groß- und Kleinschreibung nicht berücksichtigen möchten (und natürlich die ganze Kraft von 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 Ausführung der Regex-Version zehnmal so lange dauert. Dies ist wahrscheinlich nur dann ein Problem, wenn my_string enorm lang ist oder sich der Code in einer tiefen Schleife befindet.
Eine alternative Möglichkeit , alle Zeichen zählt zu erhalten , ohne Counter()
, count
und 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
ist 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 lambda
, die Folgendes verwendet:
sentence = 'Mary had a little lamb'
sum(map(lambda x : 1 if 'a' in x else 0, sentence))
Dies führt zu:
4
Es gibt noch einen weiteren Vorteil: Wenn der Satz eine Liste von Teilzeichenfolgen ist, die dieselben Zeichen wie oben enthalten, ergibt dies aufgrund der Verwendung von auch das richtige Ergebnis 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 das Auftreten eines einzelnen Zeichens überprüft wird, wie 'a'
in diesem speziellen Fall.
"Ohne count zu verwenden, um das gewünschte Zeichen in der Zeichenfolge zu finden" -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()
Ich bin ein Fan der Pandas-Bibliothek, insbesondere der value_counts()
Methode. Sie können es verwenden, um das Vorkommen jedes Zeichens in Ihrer Zeichenfolge zu zählen:
>>> import pandas as pd
>>> phrase = "I love the pandas library and its `value_counts()` method"
>>> pd.Series(list(phrase)).value_counts()
8
a 5
e 4
t 4
o 3
n 3
s 3
d 3
l 3
u 2
i 2
r 2
v 2
` 2
h 2
p 1
b 1
I 1
m 1
( 1
y 1
_ 1
) 1
c 1
dtype: int64
Python 3
Es gibt zwei Möglichkeiten, dies zu erreichen:
1) Mit eingebauter Funktion count ()
sentence = 'Mary had a little lamb'
print(sentence.count('a'))`
2) Ohne Verwendung einer Funktion
sentence = 'Mary had a little lamb'
count = 0
for i in sentence:
if i == "a":
count = count + 1
print(count)