Python-派生

派生

式の導出:(また、分析フォームとしても知られる)内包は、パイソンのユニークな特徴であり、構文糖の存在に対応する、導出は、データ構造のシーケンスから別の新しいデータシーケンスを構築することができます。
3つの導出はPython2と3でのサポートがある、があります。

  • 式を導出するためのリスト(一覧)
  • コレクション(セット)式を導出します
  • 式の辞書(辞書)の導出

リスト内包randint

基本的な形式:变量名 = [expression1 for variable in sequence[, if expression2]]
式1:式リスト生成素子は、関数の戻り値があってもよいです。
シーケンス内の変数の反復シーケンス式1に渡された変数:。
expresiion2 IF:あるいは、フィルタ条件に応じ。
 
1. 基本的なリスト内包

>>> arr = [i for i in range(5)]
>>> arr
[0, 1, 2, 3, 4]

2. 偶発オペレーションリストの内包表記

>>> arr = [i**2 for i in range(5)]
>>> arr
[0, 1, 4, 9, 16]
>>> arr = [pow(i, 2) for i in range(5)]
>>> arr
[0, 1, 4, 9, 16]
>>> arr = [pow(i, 2) if i%2==0 else -pow(i, 2) for i in range(5)]
>>> arr
[0, -1, 4, -9, 16]

3. 条件リスト内包

>>> arr = [i for i in range(10) if i < 5]
>>> arr
[0, 1, 2, 3, 4]

4. 複数のループリスト派生

>>> list_ = [[1, 2], [3, 4], [5, 6]]
>>> arr = [i for sub_list in list_ for i in sub_list]
>>> arr
[1, 2, 3, 4, 5, 6]
>>> arr = [x+y for x in range(5) for y in range(2)]
>>> arr
[0, 1, 1, 2, 2, 3, 3, 4, 4, 5]
#  0     1     2     3     4
# 0 1  0 1  0 1  0 1  0 1
# 0 1  1 2  2 3  3 4  4 5

5. その他の使い方

>>> dict_ = {'P':'y', 't':'h', 'o':'n'}
>>> arr = [k+v for k,v in dict_.items()]
>>> arr
['Py', 'th', 'on']
>>> from random import randint
>>> arr = [randint(1, 5) for i in range(5)]
>>> arr
[3, 2, 3, 2, 1]

導出を設定します

同じタイプについてのリストを導出する、唯一の[] {}置き換え

set_ = {x+y for x in range(5) for y in range(3)}
>>> set_
{0, 1, 2, 3, 4, 5, 6}
>>> set_ = {k+v for k,v in dict_.items()}
>>> set_
{'on', 'Py', 'th'}

辞書の導出

变量名 = {表达式 for 临时变量 in 可迭代内容}
 

>>> new_dict = {i:pow(i, 2) for i in range(5)}
>>> new_dict
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
>>> new_dict = {x:'Python'.index(x) for x in 'Python'}
>>> new_dict
{'P': 0, 'y': 1, 't': 2, 'h': 3, 'o': 4, 'n': 5}
>>> 
>>> dict_ = {'P':'y', 't':'h', 'o':'n'}
>>> new_dict = {v:k for k,v in dict_.items()}
>>> new_dict
{'y': 'P', 'h': 't', 'n': 'o'}
>>> dict_ = {'a': 10, 'b': 20, 'A': 3, 'C': 7, 'd': 5, 'x': 2, 'X': 4, 'y': 8}
>>> new_dict = {k.upper(): dict_.get(k.lower(), 0) + dict_.get(k.upper(), 0) for k in dict_.keys() if k in 'aAbcDxy'}
>>> new_dict
{'A': 13, 'B': 20, 'X': 6, 'Y': 8}

なぜタプル理解を使用しません

発電機用のPython、()、ジェネレータを取得する()にリスト由来の一般式[]。

>>> gener = (i for i in range(5))
>>> type(gener)
<class 'generator'>
>>> gener
<generator object <genexpr> at 0x00000179ECB01BA0>
>>> [i for i in gener]
[0, 1, 2, 3, 4]
>>> [i for i in gener]
[]

しかし、強制タイプを変換することにより、発電機は、該当のデータタイプを変換します

>>> gener = (i for i in range(5))
>>> list(gener)
[0, 1, 2, 3, 4]
>>> gener = (i for i in range(5))
>>> tuple(gener)
(0, 1, 2, 3, 4)
>>> gener = (i for i in range(5))
>>> set(gener)
{0, 1, 2, 3, 4}

おすすめ

転載: www.cnblogs.com/malinqing/p/11288237.html