जवाबों:
str.count (उप [, प्रारंभ [, अंत]])
sub
श्रेणी में प्रतिस्थापन की गैर-अतिव्यापी घटनाओं की संख्या लौटाएं[start, end]
। वैकल्पिक तर्कstart
औरend
स्लाइस अंकन के रूप में व्याख्या की जाती है।
>>> sentence = 'Mary had a little lamb'
>>> sentence.count('a')
4
जैसा कि अन्य जवाबों में कहा गया है, स्ट्रिंग विधि गणना () का उपयोग करना शायद सबसे सरल है, लेकिन यदि आप इसे अक्सर कर रहे हैं, तो संग्रह देखें। रिकॉर्ड :
from collections import Counter
my_str = "Mary had a little lamb"
counter = Counter(my_str)
print counter['a']
नियमित अभिव्यक्ति शायद?
import re
my_string = "Mary had a little lamb"
len(re.findall("a", my_string))
len(re.findall('1',bin(10)))
अजगर-3.x:
"aabc".count("a")
str.count (उप [, प्रारंभ [, अंत]])
सीमा में सबरिंग उप की गैर-अतिव्यापी घटनाओं की संख्या लौटाएं [प्रारंभ, अंत]। वैकल्पिक तर्क शुरू और अंत में स्लाइस अंकन के रूप में व्याख्या की जाती है।
str.count(a)
एक स्ट्रिंग में एकल वर्ण की गणना करने के लिए सबसे अच्छा समाधान है। लेकिन अगर आपको अधिक वर्णों की गणना करने की आवश्यकता है तो आपको पूरे स्ट्रिंग को पढ़ना होगा जितनी बार आप जितने वर्णों को गिनना चाहते हैं।
इस काम के लिए एक बेहतर तरीका होगा:
from collections import defaultdict
text = 'Mary had a little lamb'
chars = defaultdict(int)
for char in text:
chars[char] += 1
तो आपके पास एक तानाशाही होगी जो स्ट्रिंग में प्रत्येक अक्षर की घटनाओं की संख्या लौटाती है और 0
यदि यह मौजूद नहीं है।
>>>chars['a']
4
>>>chars['x']
0
असंवेदनशील काउंटर के लिए आप सबक्लासिंग द्वारा बेसक और एक्सेसर विधियों को ओवरराइड कर सकते हैं defaultdict
(बेस क्लास 'केवल पढ़ने के लिए हैं):
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
, जो पहले से ही एक वर्ग है collections
।
Counter
एक और अधिक फूला हुआ शुद्ध पायथन वर्ग है और defaultdict
की __missing__
है सी में लिखे । इस तरह के एक सरल कार्य के लिए ( int
सी में भी लागू किया गया है) यह दृष्टिकोण थोड़ा तेजी से है।
यह आसान और सीधे आगे का कार्य मदद कर सकता है:
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
। यदि आप चर को इसका नाम देते हैं, str
तो बिल्ट-इन प्रकार नहीं है। साथ ही आप चौदह बी के चौदह बार गिन रहे हैं। आप बस के for c in text
साथ बदलकर इससे बच सकते हैं for c in set(text)
।
यदि आप केस-इंसिडेंसिटी (और निश्चित रूप से रेगेक्स की सभी शक्ति) चाहते हैं तो नियमित अभिव्यक्ति बहुत उपयोगी है।
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))
ज्ञात हो कि रेगेक्स संस्करण को चलने के लिए दस गुना लंबे समय के क्रम पर ले जाता है, जो संभवतः एक मुद्दा होगा जब my_string बहुत लंबे समय तक होता है, या कोड एक गहरे लूप के अंदर होता है।
सभी वर्ण प्राप्त करने का एक वैकल्पिक तरीका बिना उपयोग किए Counter()
, count
और रेगेक्स है
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
निश्चित रूप से एक स्ट्रिंग में एक चरित्र की घटना को गिनने का सबसे संक्षिप्त और कुशल तरीका है, लेकिन मैंने एक समाधान का उपयोग करने की कोशिश की lambda
, कुछ इस तरह से:
sentence = 'Mary had a little lamb'
sum(map(lambda x : 1 if 'a' in x else 0, sentence))
यह परिणाम होगा:
4
इसके अलावा, इसका एक और फायदा यह है कि यदि वाक्य उप-स्ट्रिंग की एक सूची है जिसमें ऊपर के समान वर्ण हैं, तो यह भी सही परिणाम देता है क्योंकि का उपयोग करता है in
। एक नज़र देख लो :
sentence = ['M', 'ar', 'y', 'had', 'a', 'little', 'l', 'am', 'b']
sum(map(lambda x : 1 if 'a' in x else 0, sentence))
यह भी परिणाम है:
4
लेकिन निश्चित रूप से यह केवल तभी काम करेगा जब 'a'
इस विशेष मामले में एकल चरित्र की घटना की जांच हो ।
"आप स्ट्रिंग में विधि चाहते हैं यह खोजने के लिए गिनती का उपयोग किए बिना" विधि।
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()
मैं विशेष रूप से पंडों के पुस्तकालय का प्रशंसक हूं value_counts()
। आप अपने स्ट्रिंग में प्रत्येक वर्ण की घटना को गिनने के लिए इसका उपयोग कर सकते हैं:
>>> 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
अजगर ३
इसे प्राप्त करने के दो तरीके हैं:
1) में निर्मित समारोह गिनती () के साथ
sentence = 'Mary had a little lamb'
print(sentence.count('a'))`
2) एक फ़ंक्शन का उपयोग किए बिना
sentence = 'Mary had a little lamb'
count = 0
for i in sentence:
if i == "a":
count = count + 1
print(count)