リスト要素をグループ化する

PythonPythonBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

Python では、与えられた関数に基づいてリストの要素をグループ化することができます。これは、単語のリストを長さで、または数値のリストを偶数/奇数でグループ化したい場合など、多くのシチュエーションで役立ちます。このチャレンジでは、与えられた関数に基づいてリストの要素をグループ化する関数を書くよう求められます。

リスト要素をグループ化する

引数としてリスト lst と関数 fn を受け取り、fnlst の要素に適用した結果をキーとし、fn をそれらに適用したときに対応するキーを生成する lst の要素のリストを値とする辞書を返す関数 group_by(lst, fn) を書きなさい。

たとえば、数値のリスト [6.1, 4.2, 6.3] があり、それらを整数部分でグループ化したい場合、グループ化関数として math モジュールの floor 関数を使用できます。期待される出力は {4: [4.2], 6: [6.1, 6.3]} になります。

from collections import defaultdict

def group_by(lst, fn):
  d = defaultdict(list)
  for el in lst:
    d[fn(el)].append(el)
  return dict(d)
from math import floor

group_by([6.1, 4.2, 6.3], floor) ## {4: [4.2], 6: [6.1, 6.3]}
group_by(['one', 'two', 'three'], len) ## {3: ['one', 'two'], 5: ['three']}

まとめ

このチャレンジでは、与えられた関数に基づいてリストの要素をグループ化する方法を学びました。また、辞書を使ってグループを格納し、それらを埋めるためのループを使ってこれを行う関数を書きました。これは、多くの異なるコンテキストで適用できる便利な技術です。