より良い Python コードを書き、より良いプログラマーになるための 11 のヒントとコツを以下に示します。
range(len(x))
で反復するPython では、一般的にfor
ループを使用して反復可能なオブジェクトを反復処理します。 Python のfor
ループは、コレクション ベースの反復を使用します。つまり、Python は、反復ごとに、反復可能オブジェクトの次の項目をループ変数に割り当てます。 for
ループの通常のユースケースは次のとおりです。
values = ["a", "b", "c"] for value in values: print(value) # a # b # c
ここで、値に加えてインデックスも出力したい場合は、次のように実行できます。
index = 0 for value in values: print(index, value) index += 1 # 0 a # 1 b # 2 c
またはこれを行う別の一般的な方法は、 range(len(x))
を使用することです:
for index in range(len(values)): value = values[index] print(index, value) # 0 a # 1 b # 2 c
ただし、 enumerate()
を使用して反復可能なオブジェクトを反復処理する、より簡単で Pythonic な方法があります。通常の方法とほぼ同じようfor
ループで使用されますが、反復可能なオブジェクトをfor
ループの直後in
配置するか、 range(len(values))
として使用する代わりに、内部に配置します以下に示すように、 enumerate()
の括弧:
for count, value in enumerate(values): print(count, value) # 0 a # 1 b # 2 c
以下に示すように、 enumerate()
のstart
引数を定義することもできます。
for count, value in enumerate(values, start=1): print(count, value) # 1 a # 2 b # 3 c
enumerate()
関数は 2 つの変数を返します。
for
ループのループ変数と同様に、ループ変数には任意の名前を付けることができます。たとえば、 index
とvalue
を呼び出すことができ、それらは引き続き機能します。 enumerate()
は、 for
ループよりも効率的です。ループ内の値にアクセスして正しく使用することを忘れずに、ループ変数の値を進めることを忘れないでください。すべて Python によって自動的に処理されます。 .
リスト内包表記は、既存のリストに基づいて作成リストを定義する、より簡単で洗練された方法です。これらは、反復ごとに繰り返し実行される式を含む括弧で構成される 1 行のコードです。したがって、ループよりも時間とスペースの効率が高く、反復ステートメントを 1 行のコードで変換できます。
リスト内包表記の通常の構文は次のようになります。
newList = [ expression(element) for element in oldList if condition ]
コードでのリスト内包表記の例を次に示します。
# Using list comprehension to iterate through loop List = [character for character in 'HackerNoon'] # Displaying list print(List) # Output # ['H', 'a', 'c', 'k', 'e', 'r', 'N', 'o', 'o', 'n']
sorted()
で複雑な iterable をソートするPython のsorted()
関数は、反復可能なオブジェクトの要素を特定の順序 (昇順または降順) で並べ替え、並べ替えられたリストとして返します。シーケンス (文字列、タプル、リスト) またはコレクション (セット、ディクショナリ、固定セット)、またはその他の反復子を並べ替えるために使用できます。
sorted()
関数の構文は次のとおりです。
sorted(iterable, key=None, reverse=False)
sorted()
関数は最大 3 つのパラメータを取ります:
Python Set は、重複する値の単一のコピーをそれに格納します。したがって、リスト内の一意の値をチェックするために使用できます。例えば:
list_inp = [100, 75, 100, 20, 75, 12, 75, 25] set_res = set(list_inp) print("The unique elements of the input list using set():\n") list_res = (list(set_res)) for item in list_res: print(item)
したがって、上記のプログラムの出力は次のようになります。
The unique elements of the input list using set(): 25 75 100 20 12
ジェネレーターの基本的な機能は、必要に応じて要素を評価することです。これは、角括弧の代わりに括弧を使用するリスト内包表記の構文と非常によく似ています。
リスト内のすべての偶数の二乗を出力したい例を考えてみましょう:
myList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print("The given list is:", myList) mygen = (element ** 2 for element in myList if element % 2 == 0) print("Elements obtained from the generator are:") for ele in mygen: print(ele)
上記のコードの出力は次のようになります。
The given list is: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] Elements obtained from the generator are: 4 16 36 64 100
それらの構文はリスト内包表記と非常によく似ていると言いましたが、それがリスト内包表記や集合内包表記とどのように違うのか疑問に思っているに違いありません。リスト内包表記や集合内包表記とは異なり、ジェネレーター内包表記はオブジェクトを初期化しません。その結果、リストまたはセット内包表記の代わりにジェネレーター内包表記を使用して、プログラムのメモリ要件を下げることができます。
.get()
および.setdefault()
) を使用して辞書でデフォルト値を定義する
.setdefault()
メソッドを使用すると、キーがまだ dict にない場合にdict[key]=default
を設定できます。
.setdefault()
の構文は次のようになります。
dict.setdefault(key, default=None)
.setdefault()
の使用方法を理解するためのコード スニペットの例を次に示します。
a_dictionary = {"a": 1, "b": 2, "d": 4} a_dictionary.setdefault("c", 3) print(a_dictionary)
上記のコードの出力は次のようになります。
{'a': 1, 'b': 2, 'd': 4, 'c': 3}
以下に示すように、キーのデフォルト値を渡すことで.get()
メソッドを使用しても、同じことが実現できます。
a_dictionary = {"a": 1, "b": 2, "d": 4} print(a_dictionary.get("c", 3)) print(a_dictionary)
上記のコードの出力は次のようになります。
3 {'a': 1, 'b': 2, 'd': 4}
collections.Counter
でハッシュ可能なオブジェクトをカウントするCollections モジュールは、(組み込み型の list、dict、および tuple に加えて) 高パフォーマンスのコンテナー データ型をサポートし、メモリに情報を格納するためのさまざまな有用なデータ構造を含んでいます。
カウンターは、等しい値が追加された回数を追跡するコンテナーです。
他の言語がバッグまたはマルチセットのデータ構造を使用して実装するのと同じアルゴリズムを実装するために使用できます。
コレクションをインポートすると、コレクション内のものを次のように利用できるようになります。
import collections
カウンターのみを使用するため、次のように簡単に実行できます。
from collections import Counter
次のように使用できます。
import collections c = collections.Counter('abcdaab') for letter in 'abcde': print '%s : %d' % (letter, c[letter])
上記のコードの出力は次のようになります。
a : 3 b : 2 c : 1 d : 1 e : 0
「フォーマットされた文字列リテラル」とも呼ばれる f-string は、Python 3.6 以降でサポートされている、文字列をフォーマットするための新しい、より Pythonic な方法です。これらは、Python で文字列をフォーマットする方法として、より高速で、読みやすく、簡潔で、エラーが発生しにくい方法です。
「f-string」という名前が示すように、これらは先頭に f があり、実行時に値に置き換えられてから__format__
プロトコルを使用してフォーマットされる式を含む中括弧を持つ文字列リテラルです。
f-strings は次のように使用できます。
name = "Eric" age = 74 print(f"Hello, {name}. You are {age}.") # 'Hello, Eric. You are 74.'
.join()
で文字列を連結するPython では、 .join()
メソッドを使用して、文字列のリストを単一の文字列に連結できます。このメソッドの通常の構文は次のようになります。
'String to insert'.join([List of strings])
複数の方法で使用できます。空の文字列““
を使用すると [文字列のリスト] が単純に連結され、カンマを使用するとカンマ区切りの文字列が作成されます。改行文字\n
を使用すると、各文字列の後に改行が追加されます。以下の例を参照してください。
l = ['aaa', 'bbb', 'ccc'] s = ''.join(l) print(s) # aaabbbccc s = ','.join(l) print(s) # aaa,bbb,ccc s = '-'.join(l) print(s) # aaa-bbb-ccc s = '\n'.join(l) print(s) # aaa # bbb # ccc
{**d1, **d2}
辞書をマージ (Python 3.5+)辞書をマージする最も簡単な方法は、展開演算子 ( **
) を使用することです。このメソッドの構文は次のようになります。
{**dict1, **dict2, **dict3}
この方法をよりよく理解するための例を次に示します。
d1 = {'k1': 1, 'k2': 2} d2 = {'k3': 3, 'k4': 4} print({**d1, **d2}) # {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}
if x in list
使用して if ステートメントを単純化する赤、緑、青の原色のリストがあるとします。コードのどこかに、色を持つ新しい変数があるので、c = 赤です。次に、これが原色の 1 つであるかどうかを確認します。もちろん、次のように、リストの各項目に対してこれを確認できます。
colors = ["red", "green", "blue"] c = "red" # cumbersome and error-prone if c == "red" or c == "green" or c == "blue": print("is main color")
ただし、これにはかなりの時間がかかる可能性があり、ここで赤のタイプミスがある場合など、間違いを犯しやすくなります。 if x in list という式を使用する方が簡単で、はるかに好ましいです。
colors = ["red", "green", "blue"] c = "red" # better: if c in colors: print("is main color")
Python は広く使用されているプログラミング言語であり、上記のヒントとコツを使用することで、より優れた Python プログラマーになることができます。
この記事がお役に立てば幸いです。読み続けます!