\r\n\r\n

Pythonのリストを使って理解する方法(と使ってはいけない場合)

Pythonのこの素晴らしい機能を使って、一晩で生産性とコードの読みやすさを向上させるために知っておくべきことをすべて紹介します。

Pythonのリスト内包をご存じでしょうか。もしかしたら、よくわからないまま使っているものでさえあるかもしれません。今こそ学ぶべき時です。Pythonのリスト内包について知っておくべきことをすべて網羅するつもりだからです。

その前に、Pythonの配列やリストの仕組み、Pythonの辞書の使い方について、あらためて確認しておく必要があります。

Pythonのリスト内包は何ですか?

リスト把握は複雑そうに見えますが、そうではありません。Pythonでは、特定の条件に基づいてリストを素早くフィルタリングしたり、絞り込むための簡単な方法です。

数行のコードを書く手間が省け(特にすでにループしている場合)、コードの可読性も保たれます。

ただし、リスト把握が必ずしも答えになるとは限らないので、注意が必要です。ついつい夢中になって、複雑な理解を書いてしまいがちです。特に可読性に貢献する場合は、より多くのコードを書いた方が良い場合もあります。シンプルなタスクにこだわり、コードを1つの責任に置く。

Pythonでリスト内包を利用する方法

Python 3とPython 2の違いがよくわからない場合は、Python FAQで説明しています。

配列をコピーして、配列の各項目をループして大文字に変換するコードを考えてみましょう。

letters = ['a', 'b', 'c', 'd']print(letters)upper_letters = []for letter in letters: result = letter.upper() upper_letters.append(result)print(upper_letters)

以下は、Pythonの基本的なリスト理解を使って1行のコードで行われることを除けば、同じロジックです。

letters = ['a', 'b', 'c', 'd']print(letters)upper_letters = [x.upper() for x in letters]print(upper_letters)

見ての通り、結果は全く同じですが、この処理ではリストを理解する必要がなく、多くのコードが必要です。

この簡単な例を分解してみましょう。

この例では、letterというリストを作成しています。小文字の "a"、"b"、"c"、"d "が格納されています。これらのリスト要素をすべて大文字にしたいとします?リスト内包がない場合、結果を格納する新しいリスト(uppercaseと呼ぶ)を作成し、アルファベットリストの各要素をループして各文字を変換(そして結果に格納 - オプションだがグッドプラクティス)し、新しいリストに大文字を追加しなければならない。なんということでしょう。

ここでのリストの理解は、loopオプションとほぼ同じです。実際には、"アルファベット順のリストの各文字について、大文字に変換し、その結果を新しいリストとして返す "という意味です。

リスト内包はリストに対してのみ使用でき、新しいリストを返さなければなりません。

理解度リストは3つの部分から構成される(3つ目の部分については後述する)。リスト内包は角括弧([and])で始まり、角括弧で終わらなければならない。このように、Pythonにリストを使うことを知らせるための仕組みになっています。

角括弧の中では、resultから始める必要があります。これは、各リストの要素に対して実行したいアクションです。

上記の例では、Pythonのコアライブラリに含まれるupper()メソッドを用いて、各要素(変数名xで参照)を大文字に変換するコードを以下に示します。

[x.upper() # will not run, only half the comprehension at this point

次に、Pythonにどのリストを処理するか指示し、各要素を変数に代入する必要があります。これは、長ったらしい例でのforループと全く同じです。

for x in letters

リストをループするたびに、xの値は現在の要素の値に変更され、"a "で始まり、"b "といった具合に変化していきます。

それをまとめて(upperu lettersという変数に代入して)しまえば、終わりです。

upper_letters = [x.upper() for x in letters]

これで大文字は、"a "から始まり、"B "といった具合にリストアップされます。

Pythonのリスト内包の第3弾

前述したように、理解のために記載するのは3つ目の部分です。

上記の2つのステップが完了した後、オプションの条件を含めることができます。これは、if文を使って「この古いリストを元に、条件に合う要素だけを入れた新しいリストを作ってくれ」と言うようなものです。

こんな感じです。

ages = [1, 34, 5, 7, 3, 57, 356]print(ages)old_ages = [x for x in ages if x > 10]print(old_ages)

この例では、agesという新しいリストを使用しています。古いテーブルは、テーブルを使って組み立てます。最後のif条件は、リストの要素のうち条件を満たすものだけが新しいリストに追加されることを意味する**。この例では、10歳以上であれば、どの年齢でもOKです。

Pythonのリスト内包を使用しない場合

コツさえつかめば、リスト理解力はすごいのですが、あらゆる場面で使えるわけではありません。複数の条件が必要なときは使わないほうがいいかもしれませんね。

old_ages = [x for x in ages if x > 10 and x < 100 and x is not None]

このコードは動作しますが、長くなって混乱し始めます。同様に、単純な関数呼び出し以外のものは動作しない可能性があります。この例では、エラーが発生します。

letters = ['a', 'b', 'c', 'd', 2]print(letters)upper_letters = [x.upper() for x in letters]print(upper_letters)

これは非常に効率的なコードですが、数字を大文字にすることができないため、使用することはできません。この場合、例外処理を行うことができるため、ループを長くすることが実際に望ましい。

letters = ['a', 'b', 'c', 'd', 1]print(letters)upper_letters = []for letter in letters: try: result = letter.upper() upper_letters.append(result) except AttributeError: pass # do nothingprint(upper_letters)

Pythonのリスト内包を始める

Pythonでリストを理解することがいかに簡単か分かったと思いますので、使わない手はないでしょう。ただ、シンプルであること、読みやすさを第一に考えることを忘れないでください。

PythonでArduinoを制御したり、PythonでWebセキュリティカメラをDIYしているかもしれませんね。

あなたが興味を持っているかもしれない記事

匿名者
匿名者

0 件の投稿

作家リスト

  1. admin 0 投稿
  2. 匿名者 0 投稿

おすすめ