Python内蔵関数-min関数とmax関数-詳細
7702 ワード
ブログの主な内容は以下の通りです.
maxとmin関数の使用説明:反復可能オブジェクト要素を比較すると、最大/最小値max(iterable,*[,default=obj,key=func]) が見つかる.入力された複数のパラメータを比較し、最大/最小値max(arg 1,arg 2,*args,*[,key=func]) を見つけた.では、複雑な構造のデータの下で、関数定義のkeyをどのように使用するかについて説明します.
需要:リストに最も多く表示される要素を見つけます.3つの実装方式:(1)max関数のkeyパラメータを柔軟に使用する;(2)辞書統計要素カウントを用いて、手動で関数にカプセル化する.(3)説明を広げた.Counterクラス、Counterオブジェクトのmost_を使用commonメソッド.
拡張内容:heapqモジュールのnlargest関数部分のソースコード、collections.Counterクラスの紹介とmost_commonメソッドソースコード.
maxとmin関数の機能をどのように探求しますか?私たちがまずしなければならないのは関数の公式APIを読むことです!IDEを使用して関数を表示するか、インタラクティブな環境でコマンド:help(max)を入力すると、公式の関数コメントが表示されます.
このような内容を示し,一般にこの2つの関数を表す下位実装はC言語プログラムである.具体的な実装方法については、ソースコードのさらなる探索も必要である.このブログでは、まずAPIの内容を把握します.関数の説明から見てください.maxとmin関数の使用方法は同じで、違いはmax関数が最大値を探し、min関数が最小値を探すことだけです.以下ではmax関数のみを例としてmax関数とmin関数の使用について説明する.
minとmaxを使用すると、比較可能な要素間で比較可能でなければなりません.そうしないと、エラーが表示されます.要素間の比較については、前の文章で議論を展開しました.この博文の最後の部分は要素間の比較に関する議論です.ブログアドレス:データ型-コンテナ類データ型
一、関数の2つの使用方法:1,max(iterable,*[,default=obj,key=func])->value iterable:比較する要素はすべて反復可能なオブジェクトの中にあり、最初の位置パラメータはこの反復可能なオブジェクトに伝わり、関数は反復可能なオブジェクトの中で最も大きな要素を返します.辞書が入力場合、比較は辞書のキー、すなわちdtが入力されたことに相当する.keys().
キーワードパラメータdefault:反復可能なオブジェクトに要素がない場合、defaultキーワードパラメータを指定すると、defaultパラメータの値が返されます.この場合defaultパラメータが指定されていない場合、プログラムはエラーを報告します:ValueError:max()arg is an empty sequence;
次のコードは、heapqモジュールのnlargest関数のソースコードを読むときに遭遇したdefaultキーワードパラメータの使用です.
2,max(arg 1,arg 2,*args,*[,key=func])->valueは複数のパラメータを入力し,複数のパラメータ間を比較し,最大のパラメータを見つけた.
二、関数のデフォルトパラメータkeyの使用:keyは呼び出し可能なオブジェクトを入力しなければならない.一般的には関数を入力する.keyを指定すると、max関数はkey処理後の要素に基づいて比較されます.
需要1:例えば以下の場合、各果物の価格情報はすべて辞書の形式で保存するリストの中で、最も高い果物と最も安い果物を探し当てます
需要2:リストに最も多く表示される要素を見つけます.
注意:countメソッドをパラメータとしてmax関数に渡すと、ここでmax関数は要素の出現頻度を比較します.
1.set(lt)はltリスト内のすべての一意の値を得ることができ、簡単に言えばリスト要素を重み付けし、1つの集合(すなわちsetタイプ)を得ることができる.
2.リストのcountメソッドは、統計リスト要素の出現回数を見つけることです.
max関数を使用しないで、私たちはどのように実現しますか?
1つ目は、カスタム関数、辞書を使用して要素カウントを手動で統計する方法です.
#辞書dt、統計要素(key)、および要素の出現回数(value)#出現回数が最も大きい要素はmax_count_keyは、リスト要素を巡回し、辞書で要素の出現回数を統計した場合、統計を繰り返さない.リストのcountメソッドを使用して要素の出現回数を統計し、max_count_key比較
第2の方法(推奨):collectionsを使用する.Counterクラス、そのmost_common()メソッドは、シーケンスに最も多く出現する回数を検索することです.
collections.Counterクラスは、反復可能なオブジェクトの要素をカウントし、Counterオブジェクトにキー値ペアで保存するCounterオブジェクトがマッピングに属し、dict()でCounterオブジェクトを辞書に変換することができます.
Counterクラスのmost_common(n=None)メソッド:n個の最も一般的な要素とそのカウントをリストし、最も一般的なものから最も少なく見られるものまでリストします.nがNoneの場合、すべての要素の数がリストされます.最もよく見られるものから最も少なく見られるものまでです.関数の戻り値は、結果要素のリストです.
most_commonメソッドのソースコード読み取り:#n=Noneの場合、メソッドの実装は、要素カウントの統計結果を、関数:sorted(iterable[,key=None[,reverse=False])を内蔵することによって逆順序にソートします.#メソッドの呼び出しがnの値を指定すると、メソッドの実装はheapqモジュールのnlargest(n,iterable[,key=None])関数によって実現され、この関数の役割は反復可能なオブジェクトから最大のn要素を見つけることである.この関数を直接利用すると,要素のカウントで比較するだけで最も一般的なn要素が得られる.
Counterクラスを知ると、データ技術の場合に非常に便利なツールです.Counterクラスを優先的に使用して機能を実現することができます.これは、辞書のカウントを手動で使用するよりも便利です.
この需要2:最大出現回数または最小出現回数の要素を探す場合はmaxまたはmin関数を直接使用して解決すればよい
最も一般的なn要素を探したい場合は、Counterクラスを優先して関連機能を実現します.
maxとmin関数の使用説明:
需要:リストに最も多く表示される要素を見つけます.3つの実装方式:(1)max関数のkeyパラメータを柔軟に使用する;(2)辞書統計要素カウントを用いて、手動で関数にカプセル化する.(3)説明を広げた.Counterクラス、Counterオブジェクトのmost_を使用commonメソッド.
拡張内容:heapqモジュールのnlargest関数部分のソースコード、collections.Counterクラスの紹介とmost_commonメソッドソースコード.
maxとmin関数の機能をどのように探求しますか?私たちがまずしなければならないのは関数の公式APIを読むことです!IDEを使用して関数を表示するか、インタラクティブな環境でコマンド:help(max)を入力すると、公式の関数コメントが表示されます.
def max(*args, key=None): # known special case of max
"""
max(iterable, *[, default=obj, key=func]) -> value
max(arg1, arg2, *args, *[, key=func]) -> value
With a single iterable argument, return its biggest item. The
default keyword-only argument specifies an object to return if
the provided iterable is empty.
With two or more arguments, return the largest argument.
"""
pass
def min(*args, key=None): # known special case of min
"""
min(iterable, *[, default=obj, key=func]) -> value
min(arg1, arg2, *args, *[, key=func]) -> value
With a single iterable argument, return its smallest item. The
default keyword-only argument specifies an object to return if
the provided iterable is empty.
With two or more arguments, return the smallest argument.
"""
pass
このような内容を示し,一般にこの2つの関数を表す下位実装はC言語プログラムである.具体的な実装方法については、ソースコードのさらなる探索も必要である.このブログでは、まずAPIの内容を把握します.関数の説明から見てください.maxとmin関数の使用方法は同じで、違いはmax関数が最大値を探し、min関数が最小値を探すことだけです.以下ではmax関数のみを例としてmax関数とmin関数の使用について説明する.
minとmaxを使用すると、比較可能な要素間で比較可能でなければなりません.そうしないと、エラーが表示されます.要素間の比較については、前の文章で議論を展開しました.この博文の最後の部分は要素間の比較に関する議論です.ブログアドレス:データ型-コンテナ類データ型
一、関数の2つの使用方法:1,max(iterable,*[,default=obj,key=func])->value iterable:比較する要素はすべて反復可能なオブジェクトの中にあり、最初の位置パラメータはこの反復可能なオブジェクトに伝わり、関数は反復可能なオブジェクトの中で最も大きな要素を返します.辞書が入力場合、比較は辞書のキー、すなわちdtが入力されたことに相当する.keys().
# 0-9 , max min
>>> from random import shuffle
>>> data = list(range(10))
>>> shuffle(data)
>>> max(data)
9
>>> min(data)
0
キーワードパラメータdefault:反復可能なオブジェクトに要素がない場合、defaultキーワードパラメータを指定すると、defaultパラメータの値が返されます.この場合defaultパラメータが指定されていない場合、プログラムはエラーを報告します:ValueError:max()arg is an empty sequence;
>>> max(range(10))
9
>>> max(range(0))
Traceback (most recent call last):
File "", line 1, in
ValueError: max() arg is an empty sequence
次のコードは、heapqモジュールのnlargest関数のソースコードを読むときに遭遇したdefaultキーワードパラメータの使用です.
def nlargest(n, iterable, key=None):
""" n
: sorted(iterable, key=key, reverse=True)[:n]
"""
# Short-cut for n==1 is to use max()
if n == 1:
it = iter(iterable)
sentinel = object()
if key is None:
result = max(it, default=sentinel)
else:
result = max(it, default=sentinel, key=key)
return [] if result is sentinel else [result]
pass
# :sentinel , 。
# max default , []
2,max(arg 1,arg 2,*args,*[,key=func])->valueは複数のパラメータを入力し,複数のパラメータ間を比較し,最大のパラメータを見つけた.
>>> max(9, 1, 2, 3)
9
二、関数のデフォルトパラメータkeyの使用:keyは呼び出し可能なオブジェクトを入力しなければならない.一般的には関数を入力する.keyを指定すると、max関数はkey処理後の要素に基づいて比較されます.
需要1:例えば以下の場合、各果物の価格情報はすべて辞書の形式で保存するリストの中で、最も高い果物と最も安い果物を探し当てます
fruit_shop = [
{'name': 'apple', 'price': 5.68},
{'name': 'orange', 'price': 4.22},
{'name': 'banana', 'price': 2.65},
{'name': 'berries', 'price': 10.75}]
cheap = min(fruit_shop, key=lambda s: s['price'])
expensive = max(fruit_shop, key=lambda s: s['price'])
print(' :', cheap)
print(' :', expensive)
####
# : {'name': 'banana', 'price': 2.65}
# : {'name': 'berries', 'price': 10.75}
需要2:リストに最も多く表示される要素を見つけます.
>>> lt = [2, 2, 3, 1, 2, 2, 1, 8, 5]
>>> max(set(lt), key=lt.count)
2
注意:countメソッドをパラメータとしてmax関数に渡すと、ここでmax関数は要素の出現頻度を比較します.
1.set(lt)はltリスト内のすべての一意の値を得ることができ、簡単に言えばリスト要素を重み付けし、1つの集合(すなわちsetタイプ)を得ることができる.
>>> set(lt)
{1, 2, 3, 5, 8}
2.リストのcountメソッドは、統計リスト要素の出現回数を見つけることです.
>>> lt.count(2)
4
>>> lt.count(1)
2
max関数を使用しないで、私たちはどのように実現しますか?
1つ目は、カスタム関数、辞書を使用して要素カウントを手動で統計する方法です.
#辞書dt、統計要素(key)、および要素の出現回数(value)#出現回数が最も大きい要素はmax_count_keyは、リスト要素を巡回し、辞書で要素の出現回数を統計した場合、統計を繰り返さない.リストのcountメソッドを使用して要素の出現回数を統計し、max_count_key比較
def max_count(lt):
dt = {}
max_count_key = None
for i in lt:
#
if i not in dt:
count = lt.count(i)
dt[i] = count
if count > dt.get(max_count_key, 0):
max_count_key= i
return max_count_key
第2の方法(推奨):collectionsを使用する.Counterクラス、そのmost_common()メソッドは、シーケンスに最も多く出現する回数を検索することです.
collections.Counterクラスは、反復可能なオブジェクトの要素をカウントし、Counterオブジェクトにキー値ペアで保存するCounterオブジェクトがマッピングに属し、dict()でCounterオブジェクトを辞書に変換することができます.
>>> from collections import Counter
>>> c = Counter('MyNameisMarsenHelloWorld')
>>> c
Counter({'e': 3, 'l': 3, 'M': 2, 'a': 2, 's': 2, 'r': 2, 'o': 2, 'y': 1, 'N': 1, 'm': 1, 'i': 1, 'n': 1, 'H': 1, 'W': 1, 'd': 1})
>>> dict(c)
{'M': 2, 'y': 1, 'N': 1, 'a': 2, 'm': 1, 'e': 3, 'i': 1, 's': 2, 'r': 2, 'n': 1, 'H': 1, 'l': 3, 'o': 2, 'W': 1, 'd': 1}
Counterクラスのmost_common(n=None)メソッド:n個の最も一般的な要素とそのカウントをリストし、最も一般的なものから最も少なく見られるものまでリストします.nがNoneの場合、すべての要素の数がリストされます.最もよく見られるものから最も少なく見られるものまでです.関数の戻り値は、結果要素のリストです.
>>> c.most_common()
[('e', 3), ('l', 3), ('M', 2), ('a', 2), ('s', 2), ('r', 2), ('o', 2), ('y', 1), ('N', 1), ('m', 1), ('i', 1), ('n', 1), ('H', 1), ('W', 1), ('d', 1)]
>>> c.most_common(3)
[('e', 3), ('l', 3), ('M', 2)]
most_commonメソッドのソースコード読み取り:#n=Noneの場合、メソッドの実装は、要素カウントの統計結果を、関数:sorted(iterable[,key=None[,reverse=False])を内蔵することによって逆順序にソートします.#メソッドの呼び出しがnの値を指定すると、メソッドの実装はheapqモジュールのnlargest(n,iterable[,key=None])関数によって実現され、この関数の役割は反復可能なオブジェクトから最大のn要素を見つけることである.この関数を直接利用すると,要素のカウントで比較するだけで最も一般的なn要素が得られる.
def most_common(self, n=None):
if n is None:
return sorted(self.items(), key=_itemgetter(1), reverse=True)
return _heapq.nlargest(n, self.items(), key=_itemgetter(1))
Counterクラスを知ると、データ技術の場合に非常に便利なツールです.Counterクラスを優先的に使用して機能を実現することができます.これは、辞書のカウントを手動で使用するよりも便利です.
この需要2:最大出現回数または最小出現回数の要素を探す場合はmaxまたはmin関数を直接使用して解決すればよい
最も一般的なn要素を探したい場合は、Counterクラスを優先して関連機能を実現します.
>>> lt = [2, 2, 3, 1, 2, 2, 1, 8, 5]
>>> Counter(lt).most_common(1)
[(2, 4)]
>>> Counter(lt).most_common(1)[0][0]
2