Tel het aantal keren dat een teken in een tekenreeks voorkomt

Wat is de eenvoudigste manier om het aantal keren dat een teken in een tekenreeks voorkomt te tellen?

bijv. tel het aantal keren dat 'a'voorkomt in 'Mary had a little lamb'.


Antwoord 1, autoriteit 100%

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

Retourneer het aantal niet-overlappende subtekenreeksen subin het bereik [start, end]. Optionele argumenten starten endworden geïnterpreteerd als in plaknotatie.

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

Antwoord 2, autoriteit 11%

Je kunt count():

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

Antwoord 3, autoriteit 8%

Zoals andere antwoorden al zeiden, is het gebruik van de tekenreeksmethode count() waarschijnlijk de eenvoudigste, maar als je dit vaak doet, ga dan naar collections.Counter:

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

Antwoord 4, autoriteit 4%

Reguliere uitdrukkingen misschien?

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

Antwoord 5, autoriteit 2%

myString.count('a');

meer info hier


Antwoord 6

Python-3.x:

"aabc".count("a")

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

Retourneer het aantal niet-overlappende exemplaren van subtekenreeks sub in het bereik [start, end]. Optionele argumenten begin en einde worden geïnterpreteerd als in plaknotatie.


Antwoord 7

str.count(a)is de beste oplossing om een enkel teken in een string te tellen. Maar als u meer tekens moet tellen, moet u de hele reeks net zo vaak lezen als de tekens die u wilt tellen.

Een betere benadering voor deze baan zou zijn:

from collections import defaultdict
text = 'Mary had a little lamb'
chars = defaultdict(int)
for char in text:
    chars[char] += 1

Je hebt dus een dictaat dat het aantal keren dat elke letter in de tekenreeks voorkomt teruggeeft en 0als deze niet aanwezig is.

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

Voor een hoofdletterongevoelige teller kunt u de mutator- en accessormethoden overschrijven door defaultdictte subclasseren (de basisklassen zijn alleen-lezen):

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

Antwoord 8

Deze eenvoudige en ongecompliceerde functie kan helpen:

def check_freq(x):
    freq = {}
    for c in set(x):
       freq[c] = x.count(c)
    return freq
check_freq("abbabcbdbabdbdbabababcbcbab")
{'a': 7, 'b': 14, 'c': 3, 'd': 3}

Als begrip gewenst is:

def check_freq(x):
    return {c: x.count(c) for c in set(x)}

Antwoord 9

Reguliere expressies zijn erg handig als je hoofdletterongevoeligheid wilt (en natuurlijk alle kracht van 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))

Houd er rekening mee dat de regex-versie tien keer zo lang duurt om te draaien, wat waarschijnlijk alleen een probleem zal zijn als my_string enorm lang is, of als de code zich in een diepe lus bevindt.


Antwoord 10

a = 'have a nice day'
symbol = 'abcdefghijklmnopqrstuvwxyz'
for key in symbol:
    print key, a.count(key)

Antwoord 11

str = "count a character occurance"
List = list(str)
print (List)
Uniq = set(List)
print (Uniq)
for key in Uniq:
    print (key, str.count(key))

Antwoord 12

Een alternatieve manier om alle tekentellingen te krijgen zonder Counter(), counten regex

te gebruiken

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)

Antwoord 13

Ik weet niet wat ‘eenvoudigste’ is, maar eenvoudig begrip zou kunnen doen:

>>> my_string = "Mary had a little lamb"
>>> sum(char == 'a' for char in my_string)
4

Profiteren van de ingebouwde som, het begrip van de generator en het feit dat bool een subklasse is van een geheel getal: hoeveel keer is het karakter gelijk aan ‘a’.


Antwoord 14

a = "I walked today,"
c=['d','e','f']
count=0
for i in a:
    if str(i) in c:
        count+=1
print(count)

Antwoord 15

countis absoluut de meest beknopte en efficiënte manier om het voorkomen van een teken in een string te tellen, maar ik probeerde een oplossing te bedenken met lambda, zoiets als dit:

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

Dit zal resulteren in:

4

Er is ook nog een voordeel hiervan, als de zin een lijst is van substrings met dezelfde karakters als hierboven, dan geeft dit ook het juiste resultaat door het gebruik van in. Kijk eens :

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

Dit resulteert ook in:

4

Maar natuurlijk werkt dit alleen als in dit specifieke geval wordt gecontroleerd of er een enkel teken voorkomt, zoals 'a'.


Antwoord 16

Ik ben een fan van de panda’s-bibliotheek, in het bijzonder de value_counts()-methode. Je zou het kunnen gebruiken om het voorkomen van elk teken in je string te tellen:

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

Antwoord 17

Ik weet dat de vraag is om een bepaalde letter te tellen. Ik schrijf hier generieke code zonder enige methode te gebruiken.

sentence1 =" Mary had a little lamb"
count = {}
for i in sentence1:
    if i in count:
        count[i.lower()] = count[i.lower()] + 1
    else:
        count[i.lower()] = 1
print(count)

uitvoer

{' ': 5, 'm': 2, 'a': 4, 'r': 1, 'y': 1, 'h': 1, 'd': 1, 'l': 3, 'i': 1, 't': 2, 'e': 1, 'b': 1}

Als u nu een bepaalde letterfrequentie wilt, kunt u afdrukken zoals hieronder.

print(count['m'])
2

Antwoord 18

“Zonder tellen te gebruiken om het gewenste teken in tekenreeks te vinden”-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()

Antwoord 19

Python 3

Er zijn twee manieren om dit te bereiken:

1) Met ingebouwde functie count()

sentence = 'Mary had a little lamb'
print(sentence.count('a'))`

2) Zonder een functie te gebruiken

sentence = 'Mary had a little lamb'    
count = 0
for i in sentence:
    if i == "a":
        count = count + 1
print(count)

Antwoord 20

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

Antwoord 21

Niet meer dan dit IMHO – je kunt de bovenste of onderste methoden toevoegen

def count_letter_in_str(string,letter):
    return string.count(letter)

Other episodes