ホームページ >バックエンド開発 >Python チュートリアル >Python の効率的なプログラミングに関する 18 のヒントを共有する
この記事は Python Programming Time によって編集されました
大学で 4 年間 c または c を勉強した人は、Python 言語の効率的なプログラミング スキルに非常に興奮します。 . それはうまくいきませんでしたが、ついに自由になりました。高級言語でこれができないのなら、なぜこれほど高度な言語なのでしょうか?
>>>a=3 >>>b=6
この場合、c で変数を交換したい場合は、必ず空の変数が必要です。しかし、Python にはそれは必要ありません。必要なのは 1 行だけです。誰もが明確に見ることができます。
>>>a,b=b,a >>>print(a) >>>6 >>>ptint(b) >>>5
ほとんどの Python プログラマーは、リスト内包表記を知っており、使用しています。リスト内包表記の概念に慣れていない場合は、リスト内包表記を使用すると、リストを作成するためのより短く、より簡潔な方法が得られます。
>>> some_list = [1, 2, 3, 4, 5] >>> another_list = [ x + 1 for x in some_list ] >>> another_list [2, 3, 4, 5, 6]
Python 3.1 以降、同じ構文を使用してセットと辞書リストを作成できます:
>>> # Set Comprehensions >>> some_list = [1, 2, 3, 4, 5, 2, 5, 1, 4, 8] >>> even_set = { x for x in some_list if x % 2 == 0 } >>> even_set set([8, 2, 4]) >>> # Dict Comprehensions >>> d = { x: x % 2 == 0 for x in range(1, 11) } >>> d {1: False, 2: True, 3: False, 4: True, 5: False, 6: True, 7: False, 8: True, 9: False, 10: True}
最初の例では、some_list をベースとして使用し、異なる A コレクションを持つリストを作成します。偶数のみを含む繰り返し要素の数。ディクショナリ テーブルの例では、1 ~ 10 の非繰り返し整数のキーを作成し、値はキーが偶数かどうかを示すブール型です。
ここでもう 1 つ注目すべき点は、セットのリテラル表現です。組み込み関数 set() を使用せずに、
>>> my_set = {1, 2, 1, 2, 3, 4} >>> my_set set([1, 2, 3, 4])
という方法でコレクションを簡単に作成できます。
これは当たり前のように聞こえますが、忘れられがちです。何かを数えるのはほとんどのプログラマーにとって一般的なタスクであり、ほとんどの場合、それほど難しいことではありません。これを簡単にする方法をいくつか紹介します。
Python のコレクション クラス ライブラリには、次のようなことを行うために特別に設計された dict クラスの組み込みサブクラスがあります。
>>> from collections import Counter >>> c = Counter('hello world') >>> c Counter({'l': 3, 'o': 2, ' ': 1, 'e': 1, 'd': 1, 'h': 1, 'r': 1, 'w': 1}) >>> c.most_common(2) [('l', 3), ('o', 2)]
JSON はデータのシリアル化の非常に優れた形式であり、現在さまざまな API や Web サービスで広く使用されています。 Python の組み込み json 処理を使用すると、JSON 文字列をある程度読みやすくすることができますが、大きなデータに遭遇すると、長く連続した線として表示され、人間の目には見えにくくなります。
JSON データをより使いやすくするために、indent パラメーターを使用して美しい JSON を出力できます。これは、コンソールで対話的にプログラミングまたはログを記録する場合に特に便利です。
>>> import json >>> print(json.dumps(data))# No indention {"status": "OK", "count": 2, "results": [{"age": 27, "name": "Oz", "lactose_intolerant": true}, {"age": 29, "name": "Joe", "lactose_intolerant": false}]} >>> print(json.dumps(data, indent=2))# With indention { "status": "OK", "count": 2, "results": [ { "age": 27, "name": "Oz", "lactose_intolerant": true }, { "age": 29, "name": "Joe", "lactose_intolerant": false } ] }
同様に、組み込みの pprint モジュールを使用すると、他のものをより美しく印刷できます。
少し前に Jeff Atwood が FizzBuzz と呼ばれる簡単なプログラミング演習を宣伝しました。質問は次のように引用されています:
1 から 1 までの数字を出力するプログラムを作成してください100, 3 数値を置き換える場合は「Fizz」、5 の倍数の場合は「Buzz」、3 と 5 の倍数の場合は「FizzBuzz」を出力します。
これは、この問題を解決するための短くて興味深い方法です:
for x in range(1,101): print"fizz"[x%3*len('fizz')::]+"buzz"[x%5*len('buzz')::] or x
print "Hello" if True else "World" >>> Hello
これの下の最後のものこのメソッドは、タイプの異なる 2 つのオブジェクトをバインドする場合に非常に優れています。
nfc = ["Packers", "49ers"] afc = ["Ravens", "Patriots"] print nfc + afc >>> ['Packers', '49ers', 'Ravens', 'Patriots'] print str(1) + " world" >>> 1 world print `1` + " world" >>> 1 world print 1, "world" >>> 1 world print nfc, 1 >>> ['Packers', '49ers'] 1
これは多くの言語で見てきた非常に優れたシンプルな方法です
x = 2 if 3 > x > 1: print x >>> 2 if 1 < x > 0: print x >>> 2
nfc = ["Packers", "49ers"] afc = ["Ravens", "Patriots"] for teama, teamb in zip(nfc, afc): print teama + " vs. " + teamb >>> Packers vs. Ravens >>> 49ers vs. Patriots
teams = ["Packers", "49ers", "Ravens", "Patriots"] for index, team in enumerate(teams): print index, team >>> 0 Packers >>> 1 49ers >>> 2 Ravens >>> 3 Patriots
リストが与えられた場合、偶数リスト法を排除できます:
numbers = [1,2,3,4,5,6] even = [] for number in numbers: if number%2 == 0: even.append(number)
は次のように変換されます:
numbers = [1,2,3,4,5,6] even = [number for number in numbers if number%2 == 0]
リスト内包表記と同様に、辞書でも同じ仕事ができます:
teams = ["Packers", "49ers", "Ravens", "Patriots"] print {key: value for value, key in enumerate(teams)} >>> {'49ers': 1, 'Ravens': 2, 'Patriots': 3, 'Packers': 0}
items = [0]*3 print items >>> [0,0,0]
teams = ["Packers", "49ers", "Ravens", "Patriots"] print ", ".join(teams) >>> 'Packers, 49ers, Ravens, Patriots'
try/Except コードが洗練されていないことは認めますが、ここでは簡単な方法を示します。辞書でキーを見つけてみます。見つからない場合は、2 番目のパラメーターを使用して、対応する値がその変数値に設定されます。
data = {'user': 1, 'name': 'Max', 'three': 4} try: is_admin = data['admin'] except KeyError: is_admin = False
これに置き換えます
data = {'user': 1, 'name': 'Max', 'three': 4} is_admin = data.get('admin', False)
リスト内の一部の要素のみが必要な場合もあります。ここでは、リストのサブセットを取得するいくつかのメソッドを示します。リスト。
x = [1,2,3,4,5,6] #前3个 print x[:3] >>> [1,2,3] #中间4个 print x[1:5] >>> [2,3,4,5] #最后3个 print x[3:] >>> [4,5,6] #奇数项 print x[::2] >>> [1,3,5] #偶数项 print x[1::2] >>> [2,4,6]
Python の組み込みデータ型に加えて、コレクション モジュールにはいくつかの特別な使用例も含まれています。カウンターは状況によっては非常に実用的です。今年の Facebook HackerCup に参加した人なら、その実用性さえ理解できるでしょう。
from collections import Counter print Counter("hello") >>> Counter({'l': 2, 'h': 1, 'e': 1, 'o': 1})
コレクション ライブラリと同様に、特定の問題を効率的に解決できる itertools と呼ばれるライブラリもあります。使用例の 1 つは、すべての組み合わせを見つけることです。これにより、グループ内の要素のありえない組み合わせをすべて知ることができます。
from itertools import combinations teams = ["Packers", "49ers", "Ravens", "Patriots"] for game in combinations(teams, 2): print game >>> ('Packers', '49ers') >>> ('Packers', 'Ravens') >>> ('Packers', 'Patriots') >>> ('49ers', 'Ravens') >>> ('49ers', 'Patriots') >>> ('Ravens', 'Patriots')
これは、非常に興味深いものよりも実用的なテクニックです。 、Python では、True と False はグローバル変数なので、次のようになります。
以上がPython の効率的なプログラミングに関する 18 のヒントを共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。