目標
(pythonの)組込み関数「sorted関数」ついて利用方法を理解する。
(pythonの)組込み関数「enumerate関数」ついて利用方法を理解する。
(pythonの)組込み関数「zip関数」ついて利用方法を理解する。
「sorted関数」(組み込み関数)
「sorted関数」の利用方法
sorted関数を利用すると、引数に指定した「イテラブルオブジェクト」の中身を並び替えたリストを生成して返します。このとき、引数に指定した「イテラブルオブジェクト」の並びは影響を受けません。
sorted(iterable, /, *, key=None, reverse=False)
iterable の要素を並べ替えた新たなリストを返します。
2 つのオプション引数があり、これらはキーワード引数として指定されなければなりません。
key には 1 引数関数を指定します。これは iterable の各要素から比較キーを展開するのに使われます (例えば、
key=str.lower
のように指定します)。 デフォルト値はNone
です (要素を直接比較します)。reverse は真偽値です。
True
がセットされた場合、リストの要素は個々の比較が反転したものとして並び替えられます。https://docs.python.org/ja/3.11/library/functions.html
※「iterable」には「リスト」や「タプル」などのイテラブルオブジェクトを設定します。
※「key」にはソート(並び替え)のための基準を関数などを利用して設定します。デフォルト値は「None」です。
※「reverse」は昇順と降順を指定します。Trueは「降順」、Falseは「昇順」です。デフォルト値は「True」です。
位置専用パラメーターには「値」や「変数」をそのまま入力できます。キーワード専用パラメーターを指定するには、パラメーターの名前を利用し、「パラメータの名前=設定値」とします。今回の場合は「key」や「reverse」に「=」をつけて「key=len」や「reverse=True」とする必要があります。
「sorted関数」の利用(数値の利用)
サンプルプログラム(昇順)
tuple_data = (23, 14, 75, 7, 97)
sorted_list_data = sorted(tuple_data)
print(sorted_list_data)
実行結果
サンプルプログラム(降順)
tuple_data = (23, 14, 75, 7, 97)
sorted_list_data = sorted(tuple_data, reverse=True)
print(sorted_list_data)
実行結果
「sorted関数」の利用(文字列の利用)
サンプルプログラム(アルファベット順)
tuple_data = ('tomato', 'onion', 'cucumber', 'eggplant', 'potato')
sorted_list_data = sorted(tuple_data)
print(sorted_list_data)
実行結果
サンプルプログラム(keyの指定→文字列の短い順)
tuple_data = ('tomato', 'onion', 'cucumber', 'eggplant', 'potato')
sorted_list_data = sorted(tuple_data, key=len)
print(sorted_list_data)
実行結果
「enumerate関数」(組み込み関数)
「enumerate関数」はリストなどのイテラブルオブジェクトをfor文を利用して走査するのにとても便利な関数でした。「enumerate関数」を利用することで、要素番号と要素を同時に取り出すことができます。
下図のように繰り返しの1回目では「0,tomato」が2回目では「1,onion」がenumerateオブジェクトとして返されます。(enumerateオブジェクトはタプル型です)
for文では文で準備しふたつの変数を利用して、ブロック内でインデックス番号(開始番号)と要素を利用することができます。(アンパックされた状態)
「enumerate関数」の利用方法
enumerate オブジェクトを返します。 iterable は、シーケンスか iterator か、あるいはイテレーションをサポートするその他のオブジェクトでなければなりません。
enumerate()
によって返されたイテレータの__next__()
メソッドは、 (デフォルトでは 0 となる start からの) カウントと、 iterable 上のイテレーションによって得られた値を含むタプルを返します。>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter'] >>> list(enumerate(seasons)) [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')] >>> list(enumerate(seasons, start=1)) [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]次と等価です:
def enumerate(iterable, start=0):https://docs.python.org/ja/3.11/library/functions.html#enumerate
n = start
for elem in iterable:
yield n, elem
n += 1
「enumerate関数」の利用
サンプルプログラム
tuple_data = ('tomato', 'onion', 'cucumber', 'eggplant', 'potato')
for index_number, value in enumerate(tuple_data):
print(index_number,'--->',value)
実行結果
「zip関数」(組み込み関数)
「zip 関数」は複数のタプルを利用して、同じインデックスの要素同士をまとめることができる関数です。「zip 関数」を利用して、同じインデックスの要素同士をまとめることを「zip化」といい、「zip化」されたオブジェクトは「zip型」の「zipオブジェクト」となります。
「zip関数」の利用方法
複数のイテラブルを並行に反復処理し、各イテラブルの要素からなるタプルを生成します。
以下はプログラム例です:
>>>
>>> for item in zip([1, 2, 3], ['sugar', 'spice', 'everything nice']): ... print(item) ... (1, 'sugar') (2, 'spice') (3, 'everything nice')より正式な定義:
zip()
は、 i 番目のタプルが 引数に与えた各イテラブルの i 番目の要素を含むような、タプルのイテレータを返します。
zip()
に対する別の考え方は、この関数は行を列に、また列を行に変換するということです。これは 行列の転置 とよく似ています。https://docs.python.org/ja/3/library/functions.html#zip
zip()
は遅延評価です: イテラブルがfor
ループに渡されたり、list
でラップされたりするなどして反復処理されるまで、要素が実際に処理されることはありません。
「zip関数」の利用
サンプルプログラム(要素数が同じ場合)
name = ('tomato', 'onion', 'cucumber', 'eggplant', 'potato')
price = (150, 100, 45, 98, 68)
inventory = (150, 100, 45, 98, 68)
price_inventory_list = tuple(zip(name, price, inventory))
print(price_inventory_list)
実行結果(下の表示は改行されていますが、出力としては1行です。)
サンプルプログラム(要素数が異なる場合)
name = ('tomato', 'onion', 'cucumber', 'eggplant', 'potato', 'carrot')
price = (150, 100, 45, 98, 68)
inventory = (150, 100, 45)
price_inventory_list = tuple(zip(name, price, inventory))
print(price_inventory_list)
実行結果(要素数が異なる場合は、要素数が最小のものと同じ個数だけzip化されます。)
name = ('tomato', 'onion', 'cucumber', 'eggplant', 'potato', 'carrot')
price = (150, 45, 98, 68)
inventory = (150, 100, 45)
price_inventory_list = tuple(zip(name, price, inventory))
print(price_inventory_list)
実行結果
サンプルプログラム(別の値を設定した場合)
name = ('tomato', 'onion', 'cucumber', 'carrot', 'eggplant', 'potato')
price = (150, 100, 45, 'null', 98, 68)
inventory = (150, 100, 45, 'null', 98, 68)
price_inventory_list = tuple(zip(name, price, inventory))
print(price_inventory_list)
実行結果
サンプルプログラム(「strict」を「True」とした場合)
name = ('tomato', 'onion', 'cucumber', 'carrot', 'eggplant', 'potato')
price = (150, 100, 45, 98, 68)
inventory = (150, 100, 45, 98, 68)
price_inventory_list = tuple(zip(name, price, inventory, strict=True))
print(price_inventory_list)
実行結果
今回は以上になります。
ブックマークのすすめ
「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。