python zip()

2185 ワード

zip([iterable, ...])
zip()はPythonの組み込み関数で、パラメータとして反復可能な一連のオブジェクトを受け入れます.オブジェクト内の対応する要素を個々のtuple(メタグループ)にパッケージ化し、これらのtuplesからなるlist(リスト)を返します.入力パラメータの長さが等しくない場合は、listの長さとパラメータの中で最も短いオブジェクトが同じになります.*記号オペレータを使用して、list unzip(解凍)を使用できます.
例:
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b)
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c)
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped)
[(1, 2, 3), (4, 5, 6)]
主に次のような使い方があります.
1、二次元マトリックス変換(マトリックスの行列交換)
たとえば、リストで説明されている2 Dマトリクスがあります.
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
pythonリストから導いた方法で、私たちも簡単にこのタスクを完成することができます.
print [ [row[col] for row in a] for col in range(len(a[0]))]
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
もう一つの困惑する方法はzip関数を利用することです.
>>> a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> zip(*a)
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
>>> map(list,zip(*a))
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
この方法は速度が速いが理解しにくい.listをtuple解凍と見なし、我々の「行列交換」の効果を適切に得、各要素にlist()関数を適用することでtupleをlistに変換する.
2.指定された確率で要素を取得
>>> import random
>>> def random_pick(seq,probabilities):
        x = random.uniform(0, 1)
        cumulative_probability = 0.0
        for item, item_probability in zip(seq, probabilities):
        cumulative_probability += item_probability
        if x < cumulative_probability: 
            break
        return item
 
>>> for i in range(15):
        print random_pick("abc",[0.1,0.3,0.6])
  
'c'
'b'
'c'
'c'
'a'
'b'
'c'
'c'
'c'
'a'
'b'
'b'
'c'
'a'
'c'
という関数には制限があり、指定確率のリストは要素と1つずつ対応しなければならず、1でなければ、この関数は予想通りに動作しない可能性があります.
ここでは少し説明する必要がありますが、まずrandomを利用します.uniform()関数は1つの0-1の間の乱数を生成してxにコピーし、zip()関数を利用して要素と彼の対応する確率をtupleにパッケージ化し、その後、各要素の確率をxより大きくループを終了するまで重畳し、「a」が選択された確率は、xが0-0.1に位置する確率であり、「b」が0.1-0.4、「c」が0.4-1.0である.xが0-1の間で平均的に値を取ったと仮定すると,明らかに我々の目的はすでに達成されている.