目次
説明
Counter モジュール
Counter() class
カウンター() オブジェクト
Counter 对象的常用方法
most_common()
elements()
total()
subtract()
Counter 对象间的运算
加法运算
减法运算
并集运算
交集运算
单目运算
Counter 对象间的比较
>
==
ホームページ バックエンド開発 Python チュートリアル Python で Counter モジュールを使用する方法

Python で Counter モジュールを使用する方法

Apr 19, 2023 pm 02:55 PM
python counter

説明

プロジェクト 説明
Python インタプリタ 3.10.6

Counter モジュール

Python のコレクション モジュールで、非常によく使用されるモジュールは Counter です。 Counter は、特定のハッシュ可能なオブジェクトの数を数えるために使用される単純なカウンターです。要素とその数を辞書の形式で保存します。

Counter() class

ClassCounter() は、特定のルールに従ってこのクラスに渡されるパラメータをカウントし、カウント オブジェクトとカウント結果をkey 値のペアは辞書の形式で返されます。

Counter(iterable=None, /, **kwds)
ログイン後にコピー

クリを与える

from collections import Counter
# 返回一个空的 Counter 对象
cnt = Counter()
print(cnt)

# 将可迭代对象(字符串)作为参数
cnt = Counter('Hello World')
print(cnt)

# 将可迭代对象(列表)作为参数
cnt = Counter(['a', 'a', 'b', 'd', 'c', 'd'])
print(cnt)

# 使用可迭代对象(字典)作为参数
cnt = Counter({'a': 1, 'b': 2, 'd': 3, 'c': 2})
print(cnt)

# 使用关键字参数
cnt = Counter(a=1, b=2, d=3, c=2)
print(cnt)
ログイン後にコピー

処刑効果

Counter()
Counter({' l': 3、'o': 2、'H': 1、'e': 1、' ': 1、'W': 1、'r': 1、'd': 1})
Counter({'a': 2, 'd': 2, 'b': 1, 'c': 1})
Counter({'d': 3, 'b': 2, 'c': 2, 'a': 1})
カウンター({'d': 3, 'b': 2, 'c': 2, 'a': 1})

カウンター() オブジェクト

Dictionary

Counter() によって返される結果は辞書であり、通常の辞書のメソッドのほとんどが含まれています。ほとんどの場合、Counter オブジェクトは辞書と同じように操作できます。これについては、次の例を参照してください。

from collections import Counter
cnt = Counter('Hello World')
print(cnt)

# 输出 Counter 对象中的键值对列表
print(cnt.items())

# 移除 Counter 对象中的最后一个键值对
print(cnt.popitem())
print(cnt)

# 输出 Counter 中键 l 对应的值
print(cnt['l'])
ログイン後にコピー

実行結果

Counter({'l': 3, 'o': 2, ' H' : 1、'e': 1、' ': 1、'W': 1、'r': 1、'd': 1})
dict_items([('H', 1), ( 'e ', 1), ('l', 3), ('o', 2), (' ', 1), ('W', 1), ('r', 1), ('d' , 1 )])
('d', 1)
Counter({'l': 3, 'o': 2, 'H': 1, 'e': 1, ' ': 1, 'W ': 1, 'r': 1})
3

順序付け

Python の辞書は順序付けされていません,Unowned の意味は次のとおりですこれは、ディクショナリ内のキーと値のペアに順序がないという意味ではなく、ディクショナリ内のキーと値のペアの順序が予測できないことを意味します。これについては、次の例を参照してください:

d = {'a': 1, 'b': 2, 'c': 3}
for key in d:
    print(key)
ログイン後にコピー

この例の出力は次のようになります:

a
b
c

It

b
c
a

もちろん、他の可能性もあるので、ここではすべてをリストしません。

Python は、Python 3.6 バージョンで辞書を正式に最適化し、キーと値のペアが挿入される順序を記憶できるようにしました。この後、辞書はそれほど乱雑ではなくなります (辞書内のキーと値のペアの順序が予測可能になります)。

KeyError

Python の組み込み辞書で、存在しないキーにアクセスしようとすると、Python は KeyError 例外エラーをスローします。これについては、次の例を参照してください。

d = dict([('a', 1), ('b', 2), ('c', 3)])
print(d)

# 尝试访问字典 d 中不存在的键
print(d['d'])
ログイン後にコピー

実行効果

トレースバック (最新の呼び出しは最後):
ファイル "C:\ main.py"、5 行目、
print(d['d'])
KeyError: 'd'
{'a': 1, 'b': 2, ' c' : 3}

同じシーン。今回はカウンターが主人公です。

from collections import Counter
cnt = Counter({'a': 1, 'b': 2, 'c': 3})
print(cnt)

# 尝试访问 Counter 中不存在的键
print(cnt['d'])
ログイン後にコピー

実行効果

Counter オブジェクトに存在しないキーにアクセスする場合、KeyError 例外はスローされませんただし、デフォルトのカウント値 0 を返します。

Counter({'c': 3, 'b': 2, 'a': 1})
0

マジック メソッド__missing__

__missing__() は、キーによって辞書内の値にアクセスするときにキーが存在しない状況を処理するために使用される Python の特別なメソッドです。
辞書インデックスを使用して存在しないキーにアクセスすると、Python は特別なメソッド __missing__() を呼び出して、適切な値を返そうとします。 __missing__() メソッドが実装されていない場合、Python は KeyError 例外をスローします。これについては、次の例を参照してください。

# 创建一个字典对象,该对象继承自 Python 内置的 dict 对象
class MyDict(dict):
    def __missing__(self, key):
        return 0

# 实例化 MyDict() 对象
myDict = MyDict()
# 尝试访问 myDict 对象中不存在的键 a
print(myDict['a'])
ログイン後にコピー

実行効果

0

update() メソッド

Counter オブジェクトと dict オブジェクトも update() メソッドを実装します。 update() メソッドを使用して、辞書をパラメーターとして、メソッドを呼び出す dict オブジェクトにマージします。違いは、dict オブジェクトの update() メソッドが同じキーに遭遇すると、そのキーに対応する値に対して overwrite 操作を実行することです。 。 Counter オブジェクトの update() メソッドは、同じキーに遭遇すると、そのキーに対応する値に対して overlay 操作を実行します。これについては、次の例を参照してください:

from collections import Counter
# Python 中内置的 dict 对象
d = dict([('a', 1), ('b', 2), ('c', 3)])
print(d)

d.update({'a': 4})
print(d)

print()

# Counter 对象
cnt = Counter({'a': 1, 'b': 2, 'c': 3})
print(cnt)

cnt.update({'a': 4})
print(cnt)
ログイン後にコピー

実行効果

{'a': 1, 'b': 2, 'c' : 3 }
{'a': 4, 'b': 2, 'c': 3}

Counter({'c': 3, 'b': 2, 'a': 1} )
カウンター({'a': 5, 'c': 3, 'b': 2})

Counter 对象的常用方法

most_common()

most_common() 方法将返回一个列表,列表中的元素均为 Counter 对象中的键值对组成的元组。元组在列表中的顺序取决于计数值(键值对中的值)的大小。计数值更大的元组将位于列表的前端,计数值相等的元组将按照它们首次在列表中出现的顺序进行排列(先出现的元组将更靠近列表的前端)。
most_common() 默认将使用 Counter 对象中所有的键值对组成的元组作为返回列表中的元素。你可以通过向该方法提供一个数值,该数值将指定放回的列表中的元素的数量。

举个栗子

from collections import Counter
cnt = Counter({'a': 1, 'b': 2, 'c': 3})
print(cnt)

print()

print(cnt.most_common())
# 返回由 Counter 中计数值最大的两个
# 键值对构成的元组所组成的列表
print(cnt.most_common(2))
# 返回由 Counter 中计数值最大的
# 键值对构成的元组所组成的列表
print(cnt.most_common(1))
ログイン後にコピー

执行效果

Counter({'c': 3, 'b': 2, 'a': 1})

[('c', 3), ('b', 2), ('a', 1)]
[('c', 3), ('b', 2)]
[('c', 3)]

elements()

elements() 方法将返回一个以 Counter 对象中的键为元素的迭代器,其中每个元素将重复出现计数值所指定的次数。

迭代器中的元素将存在如下特点:

  • 元素将会按照其首次添加到 Counter 对象中的顺序进行返回。

  • 某个键对应的计数值小于一,那么该键将不会作为元素出现在 element() 方法返回的迭代器中。

举个栗子

from collections import Counter
cnt = Counter({'a': 1, 'b': 2, 'c': 3, 'd': -4})
print(cnt)

print()

print(list(cnt.elements()))
ログイン後にコピー

执行效果

Counter({'c': 3, 'b': 2, 'a': 1, 'd': -4})

['a', 'b', 'b', 'c', 'c', 'c']

total()

total() 方法将返回 Counter 对象中,所有计数值累加后得到的结果。对此,请参考如下示例:

from collections import Counter
cnt = Counter({'a': 1, 'b': 2, 'c': 3, 'd': -4})
cnt1 = Counter('Hello World')
print(cnt.total())
print(cnt1.total())
ログイン後にコピー

执行效果

2
11

subtract()

该方法的效果与 Counter 对象的 update() 方法类似。如果说 update() 方法执行的是 操作,那么 subtract() 方法执行的则是 操作。对此,请参考如下示例:

from collections import Counter
cnt = Counter({'a': 1, 'b': 2, 'c': 3, 'd': -4})

cnt.subtract({'a': 0, 'b': 1, 'd': -11})
print(cnt)
ログイン後にコピー

执行效果

Counter({'d': 7, 'c': 3, 'a': 1, 'b': 1})

Counter 对象间的运算

注:

本部分内容中讲解到的运算符仅能在 Python 3.3 及以后版本中正常使用。

加法运算

在 Python 的 Counter 模块中,两个 Counter 对象可以相加,相加后将返回一个新的 Counter 对象,其中每个元素的计数是两个原始 Counter 对象中该元素计数的总和。可以通过使用加法运算符来执行此操作。对此,请参考如下示例:

from collections import Counter

cnt = Counter('Hello')
cnt1 = Counter('World')

print(cnt)
print(cnt1)
print(cnt + cnt1)
ログイン後にコピー

执行效果

Counter({'l': 2, 'H': 1, 'e': 1, 'o': 1})
Counter({'W': 1, 'o': 1, 'r': 1, 'l': 1, 'd': 1})
Counter({'l': 3, 'o': 2, 'H': 1, 'e': 1, 'W': 1, 'r': 1, 'd': 1})

注:

在 Counter 对象间的运算过程中,对于 Counter 中不存在的键,其计数值为零。

减法运算

在 Python 的 Counter 模块中,可以使用减法运算符来对两个 Counter 对象进行减法运算,即将左侧 Counter 对象中的计数器值减去右侧 Counter 对象中相同键的计数器值,最后返回一个新的 Counter 对象。对此,请参考如下示例:

from collections import Counter

cnt = Counter('cook')
cnt1 = Counter('coder')

print(cnt)
print(cnt1)
print(cnt - cnt1)
ログイン後にコピー

执行效果

Counter({'o': 2, 'c': 1, 'k': 1})
Counter({'c': 1, 'o': 1, 'd': 1, 'e': 1, 'r': 1})
Counter({'o': 1, 'k': 1})

注:

在 Counter 对象间的运算过程中,对于 Counter 中不存在的键,其计数值为零。

并集运算

Counter 对象之间的并集运算是指两个 Counter 对象按照键的并集进行运算,返回的结果是一个新的 Counter 对象,其中包含的键和值均为 原始 Counter 对象中存在的键及其对应的最大值。对此,请参考如下示例:

from collections import Counter

cnt = Counter('Hello')
cnt1 = Counter('World')

print(cnt)
print(cnt1)
print(cnt | cnt1)
ログイン後にコピー

执行效果

Counter({'l': 2, 'H': 1, 'e': 1, 'o': 1})
Counter({'W': 1, 'o': 1, 'r': 1, 'l': 1, 'd': 1})
Counter({'l': 2, 'H': 1, 'e': 1, 'o': 1, 'W': 1, 'r': 1, 'd': 1})

交集运算

Counter 对象之间的交集运算是指两个 Counter 对象按照键的交集进行运算,返回的结果是一个新的 Counter 对象,其中包含的键和值均为 原始 Counter 对象中共同拥有的键及其对应的最小值。对此,请参考如下示例:

from collections import Counter

cnt = Counter('Hello')
cnt1 = Counter('World')

print(cnt)
print(cnt1)
print(cnt & cnt1)
ログイン後にコピー

执行效果

Counter({'l': 2, 'H': 1, 'e': 1, 'o': 1})
Counter({'W': 1, 'o': 1, 'r': 1, 'l': 1, 'd': 1})
Counter({'l': 1, 'o': 1})

单目运算

单目运算指的是表达式中存在单目运算符的运算操作。存在两种单目运算符,即单目减法运算符与单目加法运算符。无论是单目减法运算符还是单目加法运算符,它们的操作对象均为 Counter 对象中的计数值。
在对 Counter 对象进行单目运算后,将返回一个由大于零的计数值相关的键值对组成的 Counter 对象。对此,请参考如下示例:

from collections import Counter

cnt = Counter({'a': 4, 'b': 3, 'd': 0, 'c': -5})
print(+cnt)
print(-cnt)
ログイン後にコピー

执行效果

Counter({'a': 4, 'b': 3})
Counter({'c': 5})

Counter 对象间的比较

Python 3.10 版本开始,Counter 对象间开始支持常见的比较运算符,这些运算符有:

  • <

  • <=

  • >

  • >=

  • ==

  • !=

这里以 >== 为例进行讲解。

>

> 的左侧的 Counter 对象的键对应的计数值均大于该符号右侧的 Counter 对象中相同的键(对于 Counter 中不存在的键,其计数值为零)对应的计数值时,比较结果为 True。否则为 False。对此,请参考如下示例:

from collections import Counter

cnt = Counter({&#39;a&#39;: 4, &#39;b&#39;: 3, &#39;d&#39;: 7, &#39;c&#39;: 5})
cnt1 = Counter({&#39;c&#39;: 3, &#39;d&#39;: 2, &#39;b&#39;: 6, &#39;a&#39;: 4})
cnt2 = Counter({&#39;c&#39;: 4, &#39;d&#39;: 6, &#39;b&#39;: 2, &#39;a&#39;: 3})

print(cnt > cnt1)
print(cnt > cnt2)
ログイン後にコピー

执行效果

False
True

==

== 的左侧的 Counter 对象的键对应的计数值均等于该符号右侧的 Counter 对象中相同的键(对于 Counter 中不存在的键,其计数值为零)对应的计数值时,比较结果为 True。否则为 False。对此,请参考如下示例:

from collections import Counter

cnt = Counter({&#39;a&#39;: 3, &#39;b&#39;: 2, &#39;d&#39;: 6, &#39;c&#39;: 4})
cnt1 = Counter({&#39;c&#39;: 3, &#39;d&#39;: 2, &#39;b&#39;: 6, &#39;a&#39;: 4})
cnt2 = Counter({&#39;c&#39;: 4, &#39;d&#39;: 6, &#39;b&#39;: 2, &#39;a&#39;: 3})

print(cnt == cnt1)
print(cnt == cnt2)
ログイン後にコピー

执行效果

False
True

以上がPython で Counter モジュールを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

携帯電話でXMLをPDFに変換するとき、変換速度は高速ですか? 携帯電話でXMLをPDFに変換するとき、変換速度は高速ですか? Apr 02, 2025 pm 10:09 PM

Mobile XMLからPDFへの速度は、次の要因に依存します。XML構造の複雑さです。モバイルハードウェア構成変換方法(ライブラリ、アルゴリズム)コードの品質最適化方法(効率的なライブラリ、アルゴリズムの最適化、キャッシュデータ、およびマルチスレッドの利用)。全体として、絶対的な答えはなく、特定の状況に従って最適化する必要があります。

携帯電話のXMLファイルをPDFに変換する方法は? 携帯電話のXMLファイルをPDFに変換する方法は? Apr 02, 2025 pm 10:12 PM

単一のアプリケーションで携帯電話でXMLからPDF変換を直接完了することは不可能です。クラウドサービスを使用する必要があります。クラウドサービスは、2つのステップで達成できます。1。XMLをクラウド内のPDFに変換し、2。携帯電話の変換されたPDFファイルにアクセスまたはダウンロードします。

C言語合計の機能は何ですか? C言語合計の機能は何ですか? Apr 03, 2025 pm 02:21 PM

C言語に組み込みの合計機能はないため、自分で書く必要があります。合計は、配列を通過して要素を蓄積することで達成できます。ループバージョン:合計は、ループとアレイの長さを使用して計算されます。ポインターバージョン:ポインターを使用してアレイ要素を指し示し、効率的な合計が自己概要ポインターを通じて達成されます。アレイバージョンを動的に割り当てます:[アレイ]を動的に割り当ててメモリを自分で管理し、メモリの漏れを防ぐために割り当てられたメモリが解放されます。

XMLをPDFに変換できるモバイルアプリはありますか? XMLをPDFに変換できるモバイルアプリはありますか? Apr 02, 2025 pm 09:45 PM

XML構造が柔軟で多様であるため、すべてのXMLファイルをPDFSに変換できるアプリはありません。 XMLのPDFへのコアは、データ構造をページレイアウトに変換することです。これには、XMLの解析とPDFの生成が必要です。一般的な方法には、ElementTreeなどのPythonライブラリを使用してXMLを解析し、ReportLabライブラリを使用してPDFを生成することが含まれます。複雑なXMLの場合、XSLT変換構造を使用する必要がある場合があります。パフォーマンスを最適化するときは、マルチスレッドまたはマルチプロセスの使用を検討し、適切なライブラリを選択します。

XMLを写真に変換する方法 XMLを写真に変換する方法 Apr 03, 2025 am 07:39 AM

XMLは、XSLTコンバーターまたは画像ライブラリを使用して画像に変換できます。 XSLTコンバーター:XSLTプロセッサとスタイルシートを使用して、XMLを画像に変換します。画像ライブラリ:PILやImageMagickなどのライブラリを使用して、形状やテキストの描画などのXMLデータから画像を作成します。

推奨されるXMLフォーマットツール 推奨されるXMLフォーマットツール Apr 02, 2025 pm 09:03 PM

XMLフォーマットツールは、読みやすさと理解を向上させるために、ルールに従ってコードを入力できます。ツールを選択するときは、カスタマイズ機能、特別な状況の処理、パフォーマンス、使いやすさに注意してください。一般的に使用されるツールタイプには、オンラインツール、IDEプラグイン、コマンドラインツールが含まれます。

携帯電話でXMLを高品質でPDFに変換するにはどうすればよいですか? 携帯電話でXMLを高品質でPDFに変換するにはどうすればよいですか? Apr 02, 2025 pm 09:48 PM

携帯電話の高品質でXMLをPDFに変換する必要があります。クラウドでXMLを解析し、サーバーレスコンピューティングプラットフォームを使用してPDFを生成します。効率的なXMLパーサーとPDF生成ライブラリを選択します。エラーを正しく処理します。携帯電話の重いタスクを避けるために、クラウドコンピューティングの能力を最大限に活用してください。複雑なXML構造の処理、マルチページPDFの生成、画像の追加など、要件に応じて複雑さを調整します。デバッグを支援するログ情報を印刷します。パフォーマンスを最適化し、効率的なパーサーとPDFライブラリを選択し、非同期プログラミングまたは前処理XMLデータを使用する場合があります。優れたコードの品質と保守性を確保します。

Android電話でXMLをPDFに変換する方法は? Android電話でXMLをPDFに変換する方法は? Apr 02, 2025 pm 09:51 PM

Android電話でXMLをPDFに直接変換することは、組み込み機能を介して実現できません。次の手順を通じて国を保存する必要があります。XMLデータをPDFジェネレーター(テキストやHTMLなど)によって認識された形式に変換します。フライングソーサーなどのHTML生成ライブラリを使用して、HTMLをPDFに変換します。

See all articles