Python тілінде тізімдегі немесе кортеждегі барлық элементтердің санын кірістірілген len() функциясы арқылы алуға болады, ал әрбір элементтің санын (әр элементтің пайда болу саны) count() әдісі арқылы алуға болады. .
Сонымен қатар, элементтерді оқиғалар саны бойынша алу үшін Python стандартты кітапхана жинақтарының Counter сыныбын пайдалануға болады.
Бұл бөлімде біз келесілерді талқылаймыз
- Элементтердің жалпы санын есептеңіз:
len()
- Әрбір элементтің санын санаңыз (әр элементтің пайда болу саны):
count()
- Қолданылуы.
collections.Counter
- Элементтер пайда болу жиілігі бойынша шығарылады:
most_common()
- Бір-бірін қайталамайтын элементтердің санын (түрін) санау (бірегей элементтер).
- Шартты қанағаттандыратын элементтердің санын есептеңіз.
Сонымен қатар, нақты мысал ретінде келесі үлгі кодпен түсіндіріледі.
- Сөздің жолдағы қайталану санын санайды.
- Жолдағы таңбаның қайталану санын санаңыз.
Үлгі тізім болып табылады, бірақ бірдей өңдеуді кортеждер арқылы жасауға болады.
- Элементтердің жалпы санын есептеңіз: len()
- Әрбір элементтің санын санау (әр элементтің пайда болу саны): count() әдісі
- Коллекцияларды қалай пайдалануға болады. Есептегіш
- Пайда болу жиілігі бойынша элементтерді алу: most_common() әдісі
- Бір-бірін қайталамайтын элементтердің санын (түрін) санау (бірегей элементтер).
- Шартты қанағаттандыратын элементтердің санын есептеңіз.
- Сөздің жолдағы қайталану санын санайды.
- Жолдағы таңбаның қайталану санын санаңыз.
Элементтердің жалпы санын есептеңіз: len()
Тізімдегі немесе кортеждегі элементтердің жалпы санын санау үшін кірістірілген len() функциясын пайдаланыңыз.
l = ['a', 'a', 'a', 'a', 'b', 'c', 'c']
print(len(l))
# 7
Әрбір элементтің санын санау (әр элементтің пайда болу саны): count() әдісі
Әрбір элементтің санын (әр элементтің пайда болу саны) санау үшін тізімдер, кортеждер және т.б. үшін count() әдісін пайдаланыңыз.
Егер элемент ретінде жоқ мән аргумент ретінде берілсе, 0 қайтарылады.
l = ['a', 'a', 'a', 'a', 'b', 'c', 'c']
print(l.count('a'))
# 4
print(l.count('b'))
# 1
print(l.count('c'))
# 2
print(l.count('d'))
# 0
Әрбір элементтің қайталану санын бірден алғыңыз келсе, келесі коллекция.Counter пайдалы.
Коллекцияларды қалай пайдалануға болады. Есептегіш
Python стандартты кітапхана жинақтарында Counter класы бар.
Counter() — кілттер ретінде элементтер түріндегі деректер және мәндер ретінде көріністер бар dict сөздік түрінің ішкі сыныбы.
import collections
l = ['a', 'a', 'a', 'a', 'b', 'c', 'c']
c = collections.Counter(l)
print(c)
# Counter({'a': 4, 'c': 2, 'b': 1})
print(type(c))
# <class 'collections.Counter'>
print(issubclass(type(c), dict))
# True
Егер элемент кілт ретінде көрсетілсе, элементтердің санын алуға болады. Егер элемент ретінде жоқ мән көрсетілсе, 0 қайтарылады.
print(c['a'])
# 4
print(c['b'])
# 1
print(c['c'])
# 2
print(c['d'])
# 0
Сондай-ақ сөздік түрінің әдістерін пайдалана аласыз, мысалы, keys(), values(), items() т.б.
print(c.keys())
# dict_keys(['a', 'b', 'c'])
print(c.values())
# dict_values([4, 1, 2])
print(c.items())
# dict_items([('a', 4), ('b', 1), ('c', 2)])
Бұл әдістер dict_keys, т.б. түрдегі нысандарды қайтарады. Оларды for операторын іске қосқыңыз келсе, сол қалпында пайдалануға болады. Оны тізімге түрлендіру керек болса, list() пайдаланыңыз.
Пайда болу жиілігі бойынша элементтерді алу: most_common() әдісі
Есептегіште қайталанулар саны бойынша сұрыпталған пішін кортеждерінің тізімін (элемент, қайталанулар саны) қайтаратын most_common() әдісі бар.
print(c.most_common())
# [('a', 4), ('c', 2), ('b', 1)]
Ең көп қайталанатын элементті индексті көрсету арқылы алуға болады, мысалы, ең көп қайталанулар саны үшін [0] және қайталанулардың ең аз саны үшін [-1]. Тек элементтерді немесе оқиғалардың санын ғана алғыңыз келсе, индексті одан әрі көрсетуге болады.
print(c.most_common()[0])
# ('a', 4)
print(c.most_common()[-1])
# ('b', 1)
print(c.most_common()[0][0])
# a
print(c.most_common()[0][1])
# 4
Оларды қайталанулар санының азаю реті бойынша сұрыптағыңыз келсе, -1-ге орнатылған өсіммен кесіндіні пайдаланыңыз.
print(c.most_common()[::-1])
# [('b', 1), ('c', 2), ('a', 4)]
Егер n аргументі most_common() әдісі үшін көрсетілсе, ең көп қайталанатын n элементі ғана қайтарылады. Егер ол алынып тасталса, барлық элементтер.
print(c.most_common(2))
# [('a', 4), ('c', 2)]
(элемент, қайталанулар саны) кортежіне емес, оқиғалар саны бойынша реттелген элементтердің/оқиғалардың бөлек тізімін алғыңыз келсе, оны келесідей бөлшектеуге болады.
values, counts = zip(*c.most_common())
print(values)
# ('a', 'c', 'b')
print(counts)
# (4, 2, 1)
Кірістірілген zip() функциясы екі өлшемді тізімді (бұл жағдайда кортеждер тізімі) транспозициялау үшін пайдаланылады, содан кейін оны орау және шығарып алу.
Бір-бірін қайталамайтын элементтердің санын (түрін) санау (бірегей элементтер).
Тізімде немесе кортежде қанша қабаттаспайтын элементтерді (бірегей элементтер) санау үшін (қанша түрі бар) жоғарыда сипатталғандай Counter немесе set() пайдаланыңыз.
Counter нысанындағы элементтер саны бастапқы тізімдегі len() арқылы алуға болатын қабаттаспайтын элементтердің санына тең.
l = ['a', 'a', 'a', 'a', 'b', 'c', 'c']
c = collections.Counter(l)
print(len(c))
# 3
Сондай-ақ, сіз Counter нысаны қажет болмаса, жиынтық типті жиынның конструкторы set() пайдалана аласыз.
Жиын түрі қайталанатын элементтері жоқ деректер түрі болып табылады. Тізімді set() қызметіне беру қайталанатын мәндерді елемейді және элементтер ретінде тек бірегей мәндері бар жиын типті нысанды қайтарады. Бұл түрдегі элементтердің саны len() арқылы алынады.
print(set(l))
# {'a', 'c', 'b'}
print(len(set(l)))
# 3
Шартты қанағаттандыратын элементтердің санын есептеңіз.
Белгілі бір шартты қанағаттандыратын тізімдегі немесе кортеждегі элементтердің санын санау үшін тізімді түсіну белгісін немесе генератор өрнектерін пайдаланыңыз.
Мысал ретінде келесі сандар тізімі үшін теріс мәндері бар элементтердің санын есептеңіз
l = list(range(-5, 6))
print(l)
# [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]
Тізімді түсіну белгісіндегі әрбір элементке шартты өрнекті қолдану элементтері логикалық логикалық (шын, жалған) болатын тізімді береді. Логикалық типтегі bool бүтін түрдегі int түрінің ішкі сыныбы болып табылады, мұнда true 1 және жалған 0 ретінде қарастырылады. Сондықтан ақиқат мәндердің санын (шартты қанағаттандыратын элементтердің саны) sum көмегімен қосындыны есептеу арқылы санауға болады. ().
print([i < 0 for i in l])
# [True, True, True, True, True, False, False, False, False, False, False]
print(sum([i < 0 for i in l]))
# 5
Тізімді түсіну белгісіндегі [] орнына () қойсақ, генератор өрнегі шығады. Тізімді түсіну белгісі өңделген барлық элементтердің тізімін жасайды, ал генератор өрнегі элементтерді дәйекті түрде өңдейді және сондықтан жадты тиімдірек етеді.
Генератор өрнегі жалғыз аргумент болған кезде, () таңбасын алып тастауға болады, сондықтан оны соңғы жағдайдағыдай жазуға болады.
print(sum((i < 0 for i in l)))
# 5
print(sum(i < 0 for i in l))
# 5
Жалған мәндердің санын (шартты қанағаттандырмайтын элементтердің санын) санағыңыз келсе, жоқ пайдаланыңыз. > жоққа қарағанда жоғары басымдыққа ие (ол бірінші болып есептеледі), сондықтан келесі мысалдағы (i < 0) ішіндегі жақшалар () қажет емес.
print([not (i < 0) for i in l])
# [False, False, False, False, False, True, True, True, True, True, True]
print(sum(not (i < 0) for i in l))
# 6
Әрине, шарттардың өзін өзгертуге болады.
print(sum(i >= 0 for i in l))
# 6
Кейбір басқа мысалдар төменде көрсетілген.
Сандар тізімі үшін тақ элементтердің санын алу мысалы.
print([i % 2 == 1 for i in l])
# [True, False, True, False, True, False, True, False, True, False, True]
print(sum(i % 2 == 1 for i in l))
# 6
Жолдар тізімінің шартының мысалы.
l = ['apple', 'orange', 'banana']
print([s.endswith('e') for s in l])
# [True, True, False]
print(sum(s.endswith('e') for s in l))
# 2
Санауыш оқиғалар санына негізделген санау үшін қолданылады. items() (элемент, қайталанулар саны) кортежін шығарып алады және қайталанулар саны шартты көрсетеді.
Төменде екі немесе одан да көп оқиғалары бар элементтерді алу және оқиғалардың жалпы санын санау мысалы келтірілген. Бұл мысалда төрт a және екі с бар, барлығы алты.
l = ['a', 'a', 'a', 'a', 'b', 'c', 'c']
c = collections.Counter(l)
print(c.items())
# dict_items([('a', 4), ('b', 1), ('c', 2)])
print([i for i in l if c[i] >= 2])
# ['a', 'a', 'a', 'a', 'c', 'c']
print([i[1] for i in c.items() if i[1] >= 2])
# [4, 2]
print(sum(i[1] for i in c.items() if i[1] >= 2))
# 6
Төменде екі немесе одан да көп кездесуі бар элементтердің түрлерін алу және пайда болу санын санау мысалы келтірілген. Бұл мысалда екі түрі бар, a және c.
print([i[0] for i in c.items() if i[1] >= 2])
# ['a', 'c']
print([i[1] >= 2 for i in c.items()])
# [True, False, True]
print(sum(i[1] >= 2 for i in c.items()))
# 2
Сөздің жолдағы қайталану санын санайды.
Нақты мысал ретінде сөздің жолдағы кездесетін санын есептейік.
Алдымен ауыстыру() әдісін пайдаланып қажет емес үтірлер мен нүктелерді бос жолға ауыстырыңыз, содан кейін оларды жойыңыз. Содан кейін бос орындармен бөлінген тізім жасау үшін split() әдісін пайдаланыңыз.
s = 'government of the people, by the people, for the people.'
s_remove = s.replace(',', '').replace('.', '')
print(s_remove)
# government of the people by the people for the people
word_list = s_remove.split()
print(word_list)
# ['government', 'of', 'the', 'people', 'by', 'the', 'people', 'for', 'the', 'people']
Тізім жасай алсаңыз, әр сөздің қанша рет шығатынын, пайда болатын сөздердің түрлерін және коллекциялардың ең_жалпы() санын алуға болады. Ең көп кездесетін сөзді алу үшін Counter.
print(word_list.count('people'))
# 3
print(len(set(word_list)))
# 6
c = collections.Counter(word_list)
print(c)
# Counter({'the': 3, 'people': 3, 'government': 1, 'of': 1, 'by': 1, 'for': 1})
print(c.most_common()[0][0])
# the
Жоғарыда айтылғандар өте қарапайым процесс, сондықтан табиғи тілді күрделірек өңдеу үшін NLTK сияқты кітапханаларды қолданған дұрыс.
Сондай-ақ, жапон тіліндегі мәтін жағдайында мәтінді бөлу үшін split() функциясын пайдалану мүмкін емес, себебі нақты сөзді бөлу жоқ. Мысалы, бұған қол жеткізу үшін Janome кітапханасын пайдалануға болады.
Жолдағы таңбаның қайталану санын санаңыз.
Жолдар да реттілік типі болғандықтан, оларды count() әдісімен пайдалануға немесе коллекциялар конструкторына аргумент ретінде беруге болады.Counter().
s = 'supercalifragilisticexpialidocious'
print(s.count('p'))
# 2
c = collections.Counter(s)
print(c)
# Counter({'i': 7, 's': 3, 'c': 3, 'a': 3, 'l': 3, 'u': 2, 'p': 2, 'e': 2, 'r': 2, 'o': 2, 'f': 1, 'g': 1, 't': 1, 'x': 1, 'd': 1})
Ең жиі кездесетін 5 таңбаны шығарып алу мысалы.
print(c.most_common(5))
# [('i', 7), ('s', 3), ('c', 3), ('a', 3), ('l', 3)]
values, counts = zip(*c.most_common(5))
print(values)
# ('i', 's', 'c', 'a', 'l')