ここでは、Python に関する 10 の役立つヒントとテクニックを紹介します。これらのいくつかは、初心者が言語を学習する際に犯しやすい間違いです。
注: 私たちは皆 Python 3 を使用していると仮定します
リストがあります: バッグ = [1, 2, 3, 4, 5]
ここで、すべての要素を次のように 2 倍にします: [2, 4, 6, 8, 10]
ほとんどの初心者は、おそらくこれまでの言語経験に基づいてこれを行うでしょう
bag = [1, 2, 3, 4, 5] for i in range(len(bag)): bag[i] = bag[i] * 2
しかし、もっと良い方法があります:
bag = [elem * 2 for elem in bag]
とてもシンプルですよね?これは Python リスト内包表記と呼ばれます。
Trey Hunner のチュートリアルをクリックして、リスト内包表記の詳細を参照してください。
上のリストを続けてください。
可能であればこれを避けてください:
bag = [1, 2, 3, 4, 5] for i in range(len(bag)): print(bag[i])
代わりに、次のようにする必要があります:
bag = [1, 2, 3, 4, 5] for i in bag: print(i)
x がリストの場合、その要素を反復処理できます。ほとんどの場合、各要素のインデックスは必要ありませんが、必要な場合は enumerate 関数を使用します。以下のようになります:
bag = [1, 2, 3, 4, 5] for index, element in enumerate(bag): print(index, element)
非常に直感的で明確です。
Java または C 言語から Python に切り替える場合は、次のことに慣れているかもしれません:
a = 5 b = 10 # 交换 a 和 b tmp = a a = b b = tmp
しかし、Python はより自然で優れた方法を提供します。
りー十分ですよね?
10 個の整数 0 のリストが必要な場合は、まず次のことを考えます:
a = 5 b = 10 # 交换a 和 b a, b = b, a
別の方法を試してみましょう:
bag = [] for _ in range(10): bag.append(0)
ほら、なんてエレガントなんだろう。
注: リストにリストが含まれている場合、これを実行すると浅いコピーが生成されます。
例:
bag = [0] * 10
おっとっと!すべてのリストが変更されますが、最初のリストのみを変更したいと考えています。
変更します:
bag_of_bags = [[0]] * 5 # [[0], [0], [0], [0], [0]] bag_of_bags[0][0] = 1 # [[1], [1], [1], [1], [1]]
また覚えておいてください:
「時期尚早な最適化が諸悪の根源」
リストの初期化が必要かどうか自問してください。
多くの場合、文字列を出力する必要があります。変数が多い場合は、次のことは避けてください:
bag_of_bags = [[0] for _ in range(5)] # [[0], [0], [0], [0], [0]] bag_of_bags[0][0] = 1 # [[1], [0], [0], [0], [0]]
うーん、これはどのくらい乱雑に見えますか?代わりに、優れた簡潔なメソッド .format を使用できます。
これを実行します:
rreeずっといい!
Python では関数内で複数の要素を返すことができるため、作業が簡単になります。ただし、タプルを解凍するときに、一般的なエラーが発生します:
name = "Raymond" age = 22 born_in = "Oakland, CA" string = "Hello my name is " + name + "and I'm " + str(age) + " years old. I was born in " + born_in + "." print(string)
これは必須ではありません。次のように変更できます:
name = "Raymond" age = 22 born_in = "Oakland, CA" string = "Hello my name is {0} and I'm {1} years old. I was born in {2}.".format(name, age, born_in) print(string)
すべての要素を返す必要がある場合は、アンダースコア_を使用してください:
def binary(): return 0, 1 result = binary() zero = result[0] one = result[1]
とても効率的です!
また、キーとペア (キー、値) を辞書に書き込むこともよくあります。
dict に存在しないキーにアクセスしようとすると、KeyError を回避するために次のようにしたくなるかもしれません:
def binary(): return 0, 1 zero, one = binary()
ただし、get() を使用する方が良い方法です。
りーもちろん、代わりに setdefault を使用することもできます。
これはより簡単ですが、より高価な方法です:
zero, _ = binary()
dict 導出も使用できます。
りーこれら 2 つのメソッドは、count が呼び出されるたびにリストを走査するため、コストがかかります。
既存のライブラリをインポートするだけで、本当にやりたいことが実現します。
前の例について引き続き話しますが、リスト内に数値が出現する回数をカウントする関数を構築しましょう。まあ、そのようなことができるライブラリはすでにあります。
りーライブラリを使用する理由:
コードは正しく、テスト済みです。
アルゴリズムが最適化されているため、より高速に実行できる可能性があります。
抽象化: 明確で十分に文書化されているため、まだ実装されていないことに集中できます。
最後に、すべてが揃ったので、車輪を再発明する必要はありません。
この list[start:stop:step] のように、開始点と終了点を指定できます。リストの最初の 5 つの要素を取り出します:
countr = {} bag = [2, 3, 1, 2, 5, 6, 7, 9, 2, 7] for i in bag: if i in countr: countr[i] += 1 else: countr[i] = 1 for i in range(10): if i in countr: print("Count of {}: {}".format(i, countr[i])) else: print("Count of {}: {}".format(i, 0))
これはスライスです。停止点を 5 に指定すると、停止する前にリストから 5 つの要素が取り出されます。
最後の 5 つの要素をどうするか?
りー分かりませんか? -5 は、リストの末尾から 5 つの要素を取得することを意味します。
リスト内の要素間の間隔を操作したい場合は、次のようにします:
countr = {} bag = [2, 3, 1, 2, 5, 6, 7, 9, 2, 7] for i in bag: countr[i] = countr.get(i, 0) + 1 for i in range(10): print("Count of {}: {}".format(i, countr.get(i, 0)))
しかし、次のようにする必要があります:
bag = [2, 3, 1, 2, 5, 6, 7, 9, 2, 7] countr = dict([(num, bag.count(num)) for num in bag]) for i in range(10): print("Count of {}: {}".format(i, countr.get(i, 0)))
これはリスト内のステップです。 list[::2] は、リストを走査し、2 つのステップで要素を取り出すことを意味します。
list[::-1] を使用すると、クールな反転リストを実行できます。
長期的には、タブとスペースを混在させると大惨事が発生する可能性があり、IndentationError: 予期しないインデントが表示されることになります。 Tab キーを選択するかスペース バーを選択するかに関係なく、ファイルとプロジェクト全体でそれを使用し続ける必要があります。
タブの代わりにスペースを使用する理由の 1 つは、タブがすべてのエディタで同じように作成されるわけではないことです。使用するエディタによっては、タブが 2 ~ 8 個のスペースとして扱われる場合があります。
コードを記述するときにスペースを使用してタブを定義することもできます。このようにして、タブとして使用するスペースの数を選択できます。ほとんどの Python ユーザーは 4 つのスペースを使用します。
英語原文: The Python Way: 10 Tips
以上がPython開発時に注意すべき10のことの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。