ホームページ > バックエンド開発 > Python チュートリアル > Pythonプログラミング言語の35の特徴(言語の特徴と使い方のヒント)

Pythonプログラミング言語の35の特徴(言語の特徴と使い方のヒント)

WBOY
リリース: 2016-06-16 08:43:21
オリジナル
952 人が閲覧しました

1. Python の概要

Python を学び始めて以来、頻繁に使用される「ヒント」のリストを維持することにしました。 「これはいける!」と思うコードを見つけたら(StackOverflow やオープンソース ソフトウェアなどで)、理解できるまで試してからリストに追加します。 。この投稿はクリーンアップされたリストの一部です。経験豊富な Python プログラマーであれば、すでに知っているものもあれば、まだ知らないものも発見できるかもしれません。あなたが Python を学習している、またはプログラミングを学び始めたばかりの C、C++、または Java プログラマーであれば、私と同じように、それらの多くが非常に役立つことに気づくでしょう。

それぞれのトリックや言語の機能は、過剰な説明をせずに例を通してのみ検証できます。例をわかりやすくするように努めましたが、慣れによっては、一部の例はまだ少し複雑に見えるかもしれません。したがって、例を見てよくわからない場合は、タイトルから Google を通じて詳細なコンテンツを取得するのに十分な情報が得られます。

2. Python 言語の機能

リストは難易度別にソートされており、よく使用される言語の機能とテクニックが先頭にあります。

1. スピンオフ

コードをコピー コードは次のとおりです:

>>> a、b、c = 1、2、3
>>> a、b、c
(1、2、3)
>>> a, b, c = [1, 2, 3]
>>> a、b、c
(1、2、3)
>>> a, b, c = (2 * i + 1 for i in range(3))
>>> a、b、c
(1、3、5)
>>> a, (b, c), d = [1, (2, 3), 4]
>>>
1
>>> 2
>>> c
3
>>>
4

2. 交換変数分割

コードをコピー コードは次のとおりです:
>>> a, b = 1, 2
>>> a、b = b、a
>>> a、b
(2, 1)

3. 拡張とスピンオフ (Python 3 に適用)

コードをコピー コードは次のとおりです:
>>> a, *b, c = [1, 2, 3, 4, 5]
>>>
1
>>> [2、3、4]
>>>c
5

4. ネガティブインデックス

コードをコピー コードは次のとおりです: >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>>[-1]
10
>>>[-3]
8

5. リストのスライス (a[start:end])

コードをコピー コードは次のとおりです: >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>>[2:8]
[2、3、4、5、6、7]

6. 負のインデックスを使用したリストのスライス

コードをコピー コードは次のとおりです: >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>>[-4:-2]
[7, 8]

7. ステップ値を含むスライスのリスト (a[start:end:step])

コードをコピー コードは次のとおりです: >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>>[::2]
[0、2、4、6、8、10]
>>>[::3]
[0、3、6、9]
>>> a[2:8:2]
[2、4、6]

8. 負のステップ値リストのスライス

コードをコピー コードは次のとおりです: >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[::-1]
[10、9、8、7、6、5、4、3、2、1、0]
>>> a[::-2]
[10、8、6、4、2、0]

9. リストスライスの割り当て

コードをコピー コードは次のとおりです: >>> a = [1, 2, 3, 4, 5]
>>> a[2:3] = [0, 0]
>>>
[1、2、0、0、4、5]
>>> a[1:1] = [8, 9]
>>>
[1、8、9、2、0、0、4、5]
>>> a[1:-1] = []
>>>
[1, 5]

10. 名前付きスライス (slice(start, end, step))

コードをコピー コードは次のとおりです:

>>> a = [0, 1, 2, 3, 4, 5]
>>> LASTTHREE = スライス(-3, なし)
>>> 最後の 3 つ
スライス(-3、なし、なし)
>>>[最後の 3 つ]
[3、4、5]
11.zip のパッケージ化と解凍のリストと複数
コードをコピー コードは次のとおりです:

>>> a = [1, 2, 3]
>>> b = ['a', 'b', 'c']
>>> z = zip(a, b)
>>>z
[(1, 'a'), (2, 'b'), (3, 'c')]
>>>zip(*z)
[(1, 2, 3), ('a', 'b', 'c')]
12. zip を使用して隣接するリスト項目を結合します
コードをコピー コードは次のとおりです:

>>> a = [1, 2, 3, 4, 5, 6]
>>> zip(*([iter(a)] * 2))
[(1, 2), (3, 4), (5, 6)]

>>> group_adjacent = ラムダ a, k: zip(*([iter(a)] * k))
>>>グループ隣接(a, 3)
[(1, 2, 3), (4, 5, 6)]
>>>グループ隣接(a, 2)
[(1, 2), (3, 4), (5, 6)]
>>> グループ隣接(a, 1)
[(1,)、(2,)、(3,)、(4,)、(5,)、(6,)]

>>> zip(a[::2], a[1::2])
[(1, 2), (3, 4), (5, 6)]

>>> zip(a[::3], a[1::3], a[2::3])
[(1, 2, 3), (4, 5, 6)]

>>> group_adjacent = lambda a, k: zip(*(a[i::k] for i in range(k)))
>>>グループ隣接(a, 3)
[(1, 2, 3), (4, 5, 6)]
>>>グループ隣接(a, 2)
[(1, 2), (3, 4), (5, 6)]
>>> グループ隣接(a, 1)
[(1,)、(2,)、(3,)、(4,)、(5,)、(6,)]
13. zip とイテレータを使用してスライディング ウィンドウ (n グラム) を生成します
コードをコピー コードは次のとおりです:

>>> itertools インポート islice
から >>> def n_grams(a, n):
... z = (islice(a, i, None) for i in range(n))
... return zip(*z)
...
>>> a = [1, 2, 3, 4, 5, 6]
>>> n_grams(a, 3)
[(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6)]
>>> n_grams(a, 2)
[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
>>> n_grams(a, 4)
[(1, 2, 3, 4), (2, 3, 4, 5), (3, 4, 5, 6)]
14. zip を使用して辞書を逆引きします
コードをコピー コードは次のとおりです:

>>> m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
>>> m.items()
[('a', 1), ('c', 3), ('b', 2), ('d', 4)]
>>> zip(m.values(), m.keys())
[(1, 'a'), (3, 'c'), (2, 'b'), (4, 'd')]
>>> mi = dict(zip(m.values(), m.keys()))
>>>ミ
{1: 'a'、2: 'b'、3: 'c'、4: 'd'}
15. フラットリスト:
コードをコピー コードは次のとおりです:

>>> a = [[1, 2], [3, 4], [5, 6]]
>>> list(itertools.chain.from_iterable(a))
[1、2、3、4、5、6]

>>> sum(a, [])
[1、2、3、4、5、6]

>>> [l の x の l の x]
[1、2、3、4、5、6]

>>> a = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
>>> [l1 の x、l1 の l2 、l2 の x]
[1、2、3、4、5、6、7、8]

>>> a = [1, 2, [3, 4], [[5, 6], [7, 8]]]
>>> flatten = lambda x: [y for l in x for y in flatten(l)] if type(x) が list else [x]
>>> 平らにする(a)
[1、2、3、4、5、6、7、8]

注: Python のドキュメントによると、 itertools.chain.from_iterable が推奨されます。

16. ジェネレーター式

コードをコピー コードは次のとおりです:

>>> g = (xrange(10) の x には x ** 2)
>>>次(g)
0
>>>次(g)
1
>>>次(g)
4
>>>次(g)
9
>>> sum(x ** 3 for x in xrange(10))
2025年
>>> sum(x ** 3 for x in xrange(10) if x % 3 == 1)
408
17. 辞書の反復
コードをコピー コードは次のとおりです:

>>> m = {x: x ** 2 for x in range(5)}
>>>
{0:0、1:1、2:4、3:9、4:16}

>>> m = {x: 'A' + str(x) for x in range(10)}
>>>
{0: 'A0'、1: 'A1'、2: 'A2'、3: 'A3'、4: 'A4'、5: 'A5'、6: 'A6'、7: 'A7'、8 : 'A8', 9: 'A9'}
18. 辞書を反復処理して辞書を反転します
コードをコピー コードは次のとおりです:

>>> m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
>>>
{'d': 4、'a': 1、'b': 2、'c': 3}
>>> {v: k の k、m.items() の v}
{1: 'a'、2: 'b'、3: 'c'、4: 'd'}
19. 名前付きシーケンス (collections.namedtuple)
コードをコピー コードは次のとおりです:

>>> ポイント = collections.namedtuple('ポイント', ['x', 'y'])
>>> p = ポイント(x=1.0, y=2.0)
>>>p
点(x=1.0, y=2.0)
>>>x
1.0
>>> 2.0

20. 名前付きリストの継承:
コードをコピー コードは次のとおりです:
>>> クラス Point(collections.namedtuple('PointBase', ['x', 'y'])):
... __スロット__ = ()
... def __add__(self, other):
... return Point(x=self.x + other.x, y=self.y + other.y)
...
>>> p = ポイント(x=1.0, y=2.0)
>>> q = 点(x=2.0, y=3.0)
>>> p + q
点(x=3.0, y=5.0)

21. 収集および収集業務
コードをコピー コードは次のとおりです:
>>> A = {1, 2, 3, 3}
>>>A
set([1, 2, 3])
>>> B = {3, 4, 5, 6, 7}
>>>B
set([3, 4, 5, 6, 7])
>>> set([1, 2, 3, 4, 5, 6, 7])
>>>A&B
set([3])
>>> A - B
set([1, 2])
>>>B - A
set([4, 5, 6, 7])
>>>A ^ B
set([1, 2, 4, 5, 6, 7])
>>> (A ^ B) == ((A - B) | (B - A))
本当

22. マルチセットとその操作 (コレクション.カウンター)

コードをコピー コードは次のとおりです: >>> A = コレクション.カウンター([1, 2, 2])
>>> B = コレクション.カウンター([2, 2, 3])
>>>A
カウンター({2:2, 1:1})
>>>B
カウンター({2:2, 3:1})
>>> カウンタ({2:2, 1:1, 3:1})
>>>A&B
カウンター({2:2})
>>>A+B
カウンター({2:4, 1:1, 3:1})
>>> A - B
カウンタ({1:1})
>>>B - A
カウンタ({3:1})


23. 反復で最も一般的な要素 (collections.Counter)

コードをコピー
コードは次のとおりです: >>> A = collections.Counter([1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 6, 7]) >>>A
カウンタ({3:4, 1:2, 2:2, 4:1, 5:1, 6:1, 7:1})
>>> A.most_common(1)
[(3, 4)]
>>> A.most_common(3)
[(3, 4), (1, 2), (2, 2)]


24. 両端キュー (collections.deque)

コードをコピー
コードは次のとおりです: >>> Q = collections.deque() >>> Q.append(1)
>>> Q.appendleft(2)
>>> Q.extend([3, 4])
>>> Q.extendleft([5, 6])
>>>質問
deque([6, 5, 2, 1, 3, 4])
>>> Q.pop()
4
>>> Q.popleft()
6
>>>質問
deque([5, 2, 1, 3])
>>> Q.回転(3)
>>>質問
deque([2, 1, 3, 5])
>>> Q.回転(-3)
>>>質問
deque([5, 2, 1, 3])

25. 最大長の Deque (collections.deque)
コードをコピー コードは次のとおりです:

>>> last_three = collections.deque(maxlen=3)
>>> xrange(10) の場合:
... last_three.append(i)
... print ', '.join(str(x) for x in last_three)
...
0
0、1
0、1、2
1、2、3
2、3、4
3、4、5
4、5、6
5、6、7
6、7、8
7、8、9
26. 辞書の並べ替え (collections.OrderedDict)
コードをコピー コードは次のとおりです:

>>> m = dict((str(x), x) for x in range(10))
>>> ', '.join(m.keys())
1、0、3、2、5、4、7、6、9、8
>>> m = collections.OrderedDict((str(x), x) for x in range(10))
>>> ', '.join(m.keys())
0、1、2、3、4、5、6、7、8、9
>>> m = collections.OrderedDict((str(x), x) for x in range(10, 0, -1))
>>> ', '.join(m.keys())
10、9、8、7、6、5、4、3、2、1
27.デフォルト辞書 (collections.defaultdict)
コードをコピー コードは次のとおりです:

>>> m = dict()
>>>['a']
トレースバック (最後の呼び出し):
ファイル「」、1 行目、
キーエラー: 'a'
>>>
>>> m = collections.defaultdict(int)
>>>['a']
0
>>>m['b']
0
>>> m = collections.defaultdict(str)
>>>['a']
''
>>> m['b'] += 'a'
>>>m['b']
「あ」
>>> m = collections.defaultdict(lambda: '[デフォルト値]')
>>>['a']
'[デフォルト値]'
>>>m['b']
'[デフォルト値]'
28. デフォルトの辞書を使用して単純なツリーを表現します
コードをコピー コードは次のとおりです:

>>> json をインポート
>>> ツリー = ラムダ: collections.defaultdict(tree)
>>> ルート = ツリー()
>>> ルート['メニュー']['id'] = 'ファイル'
>>> root['メニュー']['値'] = 'ファイル'
>>> root['menu']['menuitems']['new']['value'] = '新規'
>>> root['menu']['menuitems']['new']['onclick'] = 'new();'
>>> root['menu']['menuitems']['open']['value'] = '開く'
>>> root['menu']['menuitems']['open']['onclick'] = 'open();'
>>> root['menu']['menuitems']['close']['value'] = '閉じる'
>>> root['menu']['menuitems']['close']['onclick'] = 'close();'
>>> print json.dumps(root, sort_keys=True, indent=4, separators=(',', ': '))
{
「メニュー」: {
"id": "ファイル",
「メニュー項目」: {
「閉じる」: {
"onclick": "close();",
"値": "閉じる"
},
"新しい": {
"onclick": "new();",
"値": "新規"
},
"開く": {
"onclick": "open();",
"値": "開く"
}
}、
"値": "ファイル"
}
}

(詳細については、https://gist.github.com/hrldcpr/2012250 を参照してください)

29. オブジェクトを一意のシーケンス番号にマッピングする (collections.defaultdict)

コードをコピー コードは次のとおりです:

>>> itertools、コレクションをインポートします
>>> value_to_numeric_map = collections.defaultdict(itertools.count().next)
>>> 数値マップ['a']
0
>>> 数値マップへの値['b']
1
>>> 数値マップ['c']
2
>>> 数値マップ['a']
0
>>> 数値マップへの値['b']
1
30. 最大要素と最小要素 (heapq.nlargest および heapq.nsmallest)
コードをコピー コードは次のとおりです:

>>> a = [random.randint(0, 100) for __ in xrange(100)]
>>> heapq.nsmallest(5, a)
[3、3、5、6、8]
>>> heapq.nlargest(5, a)
[100、100、99、98、98]
31. デカルト積 (itertools.product)
コードをコピー コードは次のとおりです:

>>> itertools.product([1, 2, 3], [4, 5]):
(1, 4)
(1, 5)
(2, 4)
(2, 5)
(3, 4)
(3, 5)
>>> itertools.product([0, 1],repeat=4):
... print ''.join(str(x) for x in p)
...
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
32. 組み合わせと組み合わせの置換 (itertools.combinations および itertools.combinations_with_replacement)
コードをコピー コードは次のとおりです:

>>> itertools.combinations([1, 2, 3, 4, 5], 3) の c:
... print ''.join(str(x) for x in c)
...
123
124
125
134
135
145
234
235
245
345
>>> itertools.combinations_with_replacement([1, 2, 3], 2) の c:
... print ''.join(str(x) for x in c)
...
11
12
13
22
23
33
33. 並べ替え (itertools.permutations)

コードをコピー コードは次のとおりです:

>>> itertools.permutations([1, 2, 3, 4]):
... print ''.join(str(x) for x in p)
...
1234
1243
1324
1342
1423
1432
2134
2143
2314
2341
2413
2431
3124
3142
3214
3241
3412
3421
4123
4132
4213
4231
4312
4321
34. リンクの反復 (itertools.chain)
コードをコピー コードは次のとおりです:

>>> a = [1, 2, 3, 4]
>>> itertools.chain(itertools.combinations(a, 2), itertools.combinations(a, 3)) の p:
... print p
...
(1, 2)
(1, 3)
(1, 4)
(2, 3)
(2, 4)
(3, 4)
(1、2、3)
(1、2、4)
(1、3、4)
(2、3、4)
>>> itertools.chain.from_iterable(itertools.combinations(a, n) for n in range(len(a) + 1)) のサブセット
... サブセットを印刷
...
()
(1,)
(2,)
(3,)
(4,)
(1, 2)
(1, 3)
(1, 4)
(2, 3)
(2, 4)
(3, 4)
(1、2、3)
(1、2、4)
(1、3、4)
(2、3、4)
(1、2、3、4)
35. 指定された値で行をグループ化する (itertools.groupby)
コードをコピー コードは次のとおりです:

>>> from オペレーター import itemgetter
>>> itertools をインポート
>>> infile として open('contactlenses.csv', 'r') を使用:
... data = [infile の行の line.strip().split(',')]
...
>>>データ = データ[1:]
>>> def print_data(行):
... print 'n'.join('t'.join('{: ...
 
>>> print_data(データ)
若い 近視 いいえ 減少しました なし
若い 近視 いいえ 普通 柔らかい
若い 近視 はい 減少しました なし
若い 近視 はい 普通 硬い
若い ハイパーメトロロープ いいえ 減少しました なし
若い ハイパーメトロロープ いいえ 普通 柔らかい
若い ハイパーメトロロープ はい 減少しました なし
若い ハイパーメトロロープ はい 普通 ハード
老視前 近視 いいえ 軽減 なし
老視前 近視 いいえ 普通 柔らかい
老視前 近視 はい 軽減 なし
老視前 近視 はい 普通 難しい
老視前 遠視 いいえ 軽減 なし
老視前 遠視 いいえ 普通 ソフト
老視前 遠視 はい 軽減 なし
老視前 遠視 はい 通常 なし
老眼 近視 なし 軽減 なし
老視 近視 いいえ 普通 なし
老視 近視 はい 軽減 なし
老眼 近視 はい 普通 難しい
老視 遠視 いいえ 軽減 なし
老視 遠視 いいえ 普通 ソフト
老視 遠視 はい 軽減 なし
老視 遠視 はい 普通 なし
 
>>> data.sort(key=itemgetter(-1))
>>>値の場合は、 itertools.groupby(data, lambda r: r[-1]):
のグループ ... print '-----------'
... print 'グループ: ' + 値
... print_data(グループ)
...
-----------
グループ: ハード
若い 近視 はい 普通 硬い
若い ハイパーメトロロープ はい 普通 ハード
老視前 近視 はい 普通 難しい
老眼 近視 はい 普通 難しい
-----------
グループ: なし
若い 近視 いいえ 減少しました なし
若い 近視 はい 減少しました なし
若い ハイパーメトロロープ いいえ 減少しました なし
若い ハイパーメトロロープ はい 減少しました なし
老視前 近視 いいえ 軽減 なし
老視前 近視 はい 軽減 なし
老視前 遠視 いいえ 軽減 なし
老視前 遠視 はい 軽減 なし
老視前 遠視 はい 通常 なし
老眼 近視 なし 軽減 なし
老視 近視 いいえ 普通 なし
老視 近視 はい 軽減 なし
老視 遠視 いいえ 軽減 なし
老視 遠視 はい 軽減 なし
老視 遠視 はい 普通 なし
-----------
グループ: ソフト
若い 近視 いいえ 普通 柔らかい
若い ハイパーメトロロープ いいえ 普通 柔らかい
老視前 近視 いいえ 普通 柔らかい
老視前 遠視 いいえ 普通 ソフト
老眼 遠視 いいえ 普通
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート