ホームページ  >  記事  >  バックエンド開発  >  必見のPython言語の30の特徴とスキル (2)

必見のPython言語の30の特徴とスキル (2)

高洛峰
高洛峰オリジナル
2017-03-17 16:45:55972ブラウズ

httpPython を学習し始めて以来、頻繁に使用する「トリック」のリストを維持することにしました。 「すごい、これはうまくいく!」と思った一節。 ” コード (例として、StackOverflow、オープンソース ソフトウェアなど) を理解するまで試してから、リストに追加します。経験豊富な方向けの記事です。 Python プログラマーの場合は、すでに知っているものもあれば、Python を学習している、または学習を始めたばかりの C、C++、または Java プログラマーであれば、まだ知らないことがあるかもしれません。それらの多くは私と同様に非常に便利です それぞれのトリックや言語の機能は、過度の説明なしで例を通してのみ確認できます。ただし、例の一部は、あなたの慣れによっては、まだ少し複雑に見えるかもしれません。例を見てよくわからない場合は、Google で詳細を確認するのに十分な情報がタイトルに表示されます

リストは、一般的に使用される言語の機能とテクニックが最初に並べられています

1.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]

> ;>> [x

l in a for x in l]

[1, 2, 3, 4, 5, 6] > = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]

>>> ; [l1 の l1 の l2 の x 2 の 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) はリスト

else

[x]

>> ;> flatten(a) [1, 2, 3, 4, 5, 6, 7, 8] 注: Python ドキュメントによれば、 itertools.chain.from_iterable が推奨されます。式

>>> g = (x ** 2 for x in x

range

(10))

>>>

0 >> ;> 次(g) >>> 次(g)

>>> x in xrange(10)) 2025

>>> sum(x ** 3 for x in xrange(10) if x % 3 == 1) 408

1.17 反復辞書

> ;>> m = {x: x ** 2 for x in range(5)}

>>> m

{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

>>> m = {x: 'A' + str (x) for x in range(10)}

>>> m

; A0'、1:'A1'、2:'A2'、3:'A3'、4:'A4'、5:'A5'、6:'A6'、7:'A7'、8:'A8' , 9: 'A9'}

1.18 辞書を反復して辞書を逆引きします

>>> m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}

>>> m

{'d': 4, 'b': 2, 'c': 3}

>>> for k, v in m.items()}

{1: 'a', 2: 'b' , 3: 'c', 4: 'd'}

1.19 名前付きシーケンス (collections.namedtuple)

>>> Point = collections.namedtuple('Point', ['x', 'y'] )

>>> p = Point(x=1.0, y=2.0)

> >> p

Point(x=1.0, y=2.0)

>>> p.x

1.0

>>>, ['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

Point(x=3.0, y=5.0)

1.21 集合および集合操作

>>> A = {1, 2, 3, 3}

>>> A

set([1, 2, 3])

>>> B = {3, 4, 5, 6, 7}

>>> B

set([3, 4, 5, 6, 7])

>>>あ | B

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))

True

1.22 多重集合及びその操作 (collections.Counter)

>>> A = collections.Counter([1, 2, 2])

>>> B = collections.Counter([2, 2, 3])

>>> A

カウンター({2: 2, 1: 1})

>>> B

カウンター({2: 2, 3: 1})

>>>あ | B

カウンター({2: 2, 1: 1, 3: 1})

>>> A & B

カウンター({2: 2})

>>> A + B

カウンター({2: 4, 1: 1, 3: 1})

>>> A - B

カウンター({1:1})

>>> B - A

Counter({3: 1})

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)]

1.24 双端队列 (collections.deque)

>>> Q = collections.deque()

>>> Q.app終了(1)

>>> Q.appendleft(2)

>>> Q.extend([3, 4])

>>> Q.extendleft([5, 6])

>>> Q

deque([6, 5, 2, 1, 3, 4])

>>> Q.pop()

4

>>> Q.popleft()

6

>>> Q

deque([5, 2, 1, 3])

>>> Q.回転(3)

>>> Q

deque([2, 1, 3, 5])

>>> Q.回転(-3)

>>> Q

deque([5, 2, 1, 3])

1.25 有最大長度の双端队列 (collections.deque)

>>> last_three = collections.deque(maxlen=3)

>>> for i in 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

1.26 字典排序 (collections.OrderedDict)

>>> m = dict((str(x), x) for x in range(10))

>>> print ', '.join(m.keys())

1, 0, 3, 2, 5, 4, 7, 6, 9, 8

>>> m = collections.OrderedDict((str(x), x) for x in range(10))

>>> print ', '.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))

>>> print ', '.join(m.keys())

10, 9, 8, 7, 6, 5, 4, 3, 2, 1

1.27 缺字省典 (collections.defaultdict)

>> ;> m = dict()

>>> m['a']

トレースバック (最新の call 最後):

File ""、1 行目、<module> 内  

KeyError: 'a'

>>>  

>>> m = collections.defaultdict(int)

>>> m['a']

0

>>> m['b']

0

>>> m = collections.defaultdict(str)

>>> m['a']

''

>>> m['b'] += 'a'

>>> m['b']

'a'

>>> m = collections.defaultdict(lambda: '[デフォルト値]')

>>> m['a']

'[デフォルト値]'

>>> m['b']

'[デフォルト値]'

1.28 用缺省字典表示简单的树

>>> json

>>> をインポートします。 Tree = lambda: collections.defaultdict(tree)

>>> root =tree()

>>> root['menu']['id'] = 'file'

>>> root['メニュー']['値'] = 'ファイル'

>>> root['menu']['menuitems']['new']['value'] = 'New'

>>> 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=(',', ': '))

{

"menu": {

"id": "file",

"menuitems": {

"close": {

"onclick": "close();",

"value": "閉じる"

},

"新規": {

" onclick": "new();",

"value": "New"

},

"open": {

"onclick": open();",

"値": " 「

}

}、

"value": "File"

}

(https://gist.github.com/hrldcpr/201 2250查看详情)

1.29 映射对象到達唯一の配列数 (collections.defaultdict)

>>> itertools、コレクションをインポート

>>> value_to_numeric_map = collections.defaultdict(itertools.count().next)

>>> value_to_numeric_map['a']

0

>>> value_to_numeric_map['b']

1

>>> value_to_numeric_map['c']

2

>>> value_to_numeric_map['a']

0

>>> value_to_numeric_map['b']

1


以上が必見のPython言語の30の特徴とスキル (2)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。