ホームページ >バックエンド開発 >Python チュートリアル >Python での zip() 関数の使用法に関するチュートリアルの例

Python での zip() 関数の使用法に関するチュートリアルの例

WBOY
WBOYオリジナル
2016-06-16 08:43:021385ブラウズ

この記事の例では、Python の zip() 関数の定義と使用法について説明しています。これは、Python 初心者にとって一定の参考になると思います。詳細は以下の通りです:

1. 定義:

zip([iterable, ...])
zip() は Python の組み込み関数であり、一連の反復可能なオブジェクトをパラメーターとして受け取り、オブジェクト内の対応する要素をタプル (タプル) にパックし、これらのリストで構成されるタプルを返します。 (リスト)。渡されたパラメータの長さが等しくない場合、返されるリストの長さは、パラメータの中で最も短いオブジェクトと同じになります。 * 演算子を使用すると、リストを解凍 (解凍) できます。

2. 使用例:

読者は、次の例を見ることで、zip() 関数の基本的な使用法を理解できます。

>>> 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次元行列変換(行列の行と行の交換)

たとえば、リストで記述された 2 次元行列があります

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

もう 1 つの紛らわしい方法は、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() を適用してタプルをリストに変換します。各要素に関数を追加します。

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):
 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 で対応する必要があり、その合計は 1 でなければなりません。そうでない場合、この関数は期待どおりに動作しない可能性があります。

ここでは少し説明が必要です。まず、random.uniform() 関数を使用して 0 ~ 1 の乱数を生成し、それを x にコピーします。zip() 関数を使用して、要素とその対応する確率をタプルにパックします。 、その後、合計が x より大きくなるまで各要素の確率が重ね合わされ、ループが終了します

このように、「a」が選択される確率は、x が 0 ~ 0.1 の値をとる確率であり、「b」は 0.1 ~ 0.4、「c」は 0.4 ~ 1.0 の値をとるとします。値は 0 ~ 1 です。はい、明らかに目標は達成されました。

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