[Python] zip関数を試してみる

in SCT.암호화폐.Crypto5 years ago (edited)

こんにちは、@yasuです。

zip関数は、n次元の1個のリストをn個の1次元リストに分離します。

例えば、座標を示すx,y,z座標の3次元リストをxだけの1次元リスト、yだけの1次元リスト、zだけの1次元リストに分離します。

また、zip*関数は、zip関数の逆の働きをします。n個の1次元リストをn次元の1個のリストに束ねます。

コード

# 
# 配列変数間の交換
# 
jpn=["リンゴ","バナナ","イチゴ",]
eng=["apple","banana","strawberry",]
print(zip(jpn, eng))
#<zip object at 0x7f0c6c582e40>

# zip
print(list(zip(jpn, eng)))
#見やすいように表示を整形しました。
#[
#   ('リンゴ', 'apple'), 
#   ('バナナ', 'banana'), 
#   ('イチゴ', 'strawberry')
#]

# zip*
# zipの反対の処理をする。
mixed=[('リンゴ', 'apple'), ('バナナ', 'banana'), ('イチゴ', 'strawberry')]
print(list(zip(*mixed)))
#見やすいように表示を整形しました。
#[
#   ('リンゴ', 'バナナ', 'イチゴ'), 
#   ('apple', 'banana', 'strawberry')
#]

jpn2, eng2 = zip(* mixed)
print(jpn2)
print(eng2)
#('リンゴ', 'バナナ', 'イチゴ')
#('apple', 'banana', 'strawberry')

# ----------------------------------------------------
#三つの配列の場合

jpn=["リンゴ","バナナ","イチゴ",]
eng=["apple","banana","strawberry",]
price=[100,200,300]

print(list(zip(jpn, eng, price)))
#見やすいように表示を整形しました。
#[
#   ('リンゴ', 'apple', 100), 
#   ('バナナ', 'banana', 200), 
#   ('イチゴ', 'strawberry', 300)
#]

mixed = [('リンゴ', 'apple', 100), ('バナナ', 'banana', 200), ('イチゴ', 'strawberry', 300)]
print(list(zip(*mixed)))
#見やすいように表示を整形しました。
#[
#   ('リンゴ', 'バナナ', 'イチゴ'), 
#   ('apple', 'banana', 'strawberry'), 
#   (100, 200, 300)
#]


# 
# ちょっと応用
#
#2次元配列のリスト
#例)幅wと高さhの情報を持つ情報のリスト
sizelist = [(10,11),(20,21),(30,31)]

#
# ケース1
#
#for文を使ってコピーしてみる
sizelist2 = [x for x in sizelist]
print (sizelist2)
#[(10, 11), (20, 21), (30, 31)]

#上と同じ処理
#この程度ならcopy関数ででコーできる
sizelist3 = sizelist.copy()
print (sizelist3)
#[(10, 11), (20, 21), (30, 31)]

#
# ケース2
#
#2次元配列のリストを分離してみる
#例)wとhに分離する
w, h = zip(*(x for x in sizelist))
print (w, h)
#(10, 20, 30) (11, 21, 31)

#上と同じ処理
#この程度ならzip*関数で処理できる
w, h = zip(*sizelist)
print (w, h)
#(10, 20, 30) (11, 21, 31)

実行結果

image.png

Sort:  

@yasu transfered 0.5 KRWP to @krwp.burn. voting percent : 7.41%, voting power : 61.64%, steem power : 1931913.61, STU KRW : 1200.
@yasu staking status : 250 KRWP
@yasu limit for KRWP voting service : 0.5 KRWP (rate : 0.002)
What you sent : 0.5 KRWP [47478591 - 3e5d4fc18f3df9deddcd656780f3716ee8717cca]

Coin Marketplace

STEEM 0.12
TRX 0.34
JST 0.033
BTC 123609.31
ETH 4527.79
SBD 0.77