Python でフィルターに基づいてリストを分割する

PythonPythonBeginner
今すぐ練習

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

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

はじめに

Python では、与えられたフィルターに基づいてリストを 2 つのグループに分割できます。これは、リスト内包表記と zip() 関数を使って行うことができます。このチャレンジでは、リストとフィルターを入力として受け取り、フィルターを通過する要素を含むリストと通過しない要素を含むリストの 2 つのリストを返す関数を書くよう求められます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python/BasicConceptsGroup -.-> python/booleans("Booleans") python/BasicConceptsGroup -.-> python/comments("Comments") python/ControlFlowGroup -.-> python/conditional_statements("Conditional Statements") python/ControlFlowGroup -.-> python/for_loops("For Loops") python/ControlFlowGroup -.-> python/list_comprehensions("List Comprehensions") python/DataStructuresGroup -.-> python/lists("Lists") python/DataStructuresGroup -.-> python/tuples("Tuples") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/FunctionsGroup -.-> python/build_in_functions("Build-in Functions") subgraph Lab Skills python/booleans -.-> lab-13591{{"Python でフィルターに基づいてリストを分割する"}} python/comments -.-> lab-13591{{"Python でフィルターに基づいてリストを分割する"}} python/conditional_statements -.-> lab-13591{{"Python でフィルターに基づいてリストを分割する"}} python/for_loops -.-> lab-13591{{"Python でフィルターに基づいてリストを分割する"}} python/list_comprehensions -.-> lab-13591{{"Python でフィルターに基づいてリストを分割する"}} python/lists -.-> lab-13591{{"Python でフィルターに基づいてリストを分割する"}} python/tuples -.-> lab-13591{{"Python でフィルターに基づいてリストを分割する"}} python/function_definition -.-> lab-13591{{"Python でフィルターに基づいてリストを分割する"}} python/build_in_functions -.-> lab-13591{{"Python でフィルターに基づいてリストを分割する"}} end

リストを二つに分ける

bifurcate(lst, filter) という関数を書きましょう。この関数は、リスト lst とフィルター filter を入力として受け取り、二つのリストからなるリストを返します。最初のリストはフィルターを通過する lst の要素を含み、二番目のリストは通過しない要素を含む必要があります。

この関数を実装するには、リスト内包表記と zip() 関数を使うことができます。zip() 関数は二つ以上のリストを入力として受け取り、各リストからの対応する要素を含むタプルのリストを返します。たとえば、zip([1, 2, 3], [4, 5, 6])[(1, 4), (2, 5), (3, 6)] を返します。

この関数を使って、lstfilter の両方を同時に反復処理し、フィルターを通過するかどうかに基づいて要素を適切なリストに追加することができます。

def bifurcate(lst, filter):
  return [
    [x for x, flag in zip(lst, filter) if flag],
    [x for x, flag in zip(lst, filter) if not flag]
  ]
bifurcate(['beep', 'boop', 'foo', 'bar'], [True, True, False, True])
## [ ['beep', 'boop', 'bar'], ['foo'] ]

まとめ

このチャレンジでは、与えられたフィルターに基づいてリストを 2 つのグループに分割する方法を学びました。リスト内包表記と zip() 関数を使って、リストとフィルターの両方を同時に反復処理し、フィルターを通過するかどうかに基づいて要素を適切なリストに追加しました。