検索ガイド -Search Guide-

単語と単語を空白で区切ることで AND 検索になります。
例: python デコレータ ('python' と 'デコレータ' 両方を含む記事を検索します)
単語の前に '-' を付けることで NOT 検索になります。
例: python -デコレータ ('python' は含むが 'デコレータ' は含まない記事を検索します)
" (ダブルクオート) で語句を囲むことで 完全一致検索になります。
例: "python data" 実装 ('python data' と '実装' 両方を含む記事を検索します。'python data 実装' の検索とは異なります。)
img_for_tre_tron

Tré Thộn を食べたことがありますか?
ベトナム・ビンズオン滞在中の方は是非注文して食べてみて!
絶対に美味しいです!
ホーチミン市内へも配達可能です。お問い合わせください。

Have you ever had "Tré Thộn" before?
If you're living at Bình Dương in Vietnam, you "must" try to order and eat it.
I'm sure you're very surprised how delicious it is!!
If you're in Hồ Chí Minh, you have a chance to get it too. Please call!!
>>
effective_python

【 Effective Python, 2nd Edition 】アンパックのちょっとした使い方 - 1: 一時変数を使わずにスワップする、2: インデックス番号を用いないでネストしている iterable の要素を取り出す - 投稿一覧へ戻る

Published 2020年6月10日16:03 by mootaro23

SUPPORT UKRAINE

- Your indifference to the act of cruelty can thrive rogue nations like Russia -

1: 次のようなリストをアルファベット順に並べ替えるとします( sort() を使っちゃダメですよ)。


friends = ['Hana', 'Yuka', 'Nana', 'Saki']



Python に馴染みが薄い方は、次のように一時変数を利用して入れ替えを行うと思います。


def bubble_sort(a):
for _ in range(len(a)):
for i in range(1, len(a)):
if a[i] < a[i - 1]:
temp = a[i]
a[i] = a[i - 1]
a[i - 1] = temp

bubble_sort(friends)
print(friends) # ['Hana', 'Nana', 'Saki', 'Yuka']



しかしアンパックを利用することで、一時変数を利用することなく2つの値をスワップさせることが可能です。


def bubble_sort2(a):
for _ in range(len(a)):
for i in range(1, len(a)):
if a[i] < a[i - 1]:
a[i - 1], a[i] = a[i], a[i - 1]

bubble_sort2(friends)
print(friends) # ['Hana', 'Nana', 'Saki', 'Yuka']



このアンパックを利用した値のスワップでは、
アンパック代入式の右辺 (a[i], a[i - 1]) が先に評価されて内部で自動的に作られる一時変数にセットされ、
続いて左辺の変数へ代入が行われます。そして最後に使用された一時変数は、そっと、消去されます。


2: ネストしている iterable からの要素の取り出しにアンパックを利用することで、コードがインデックス番号だらけになることを防ぐことができ、スッキリします。


次のようなタプルのリストを出力します。


grades = [('Nana', 90), ('Saki', 92), ('Yuka', 82)]



丁寧に記述すると次のようになるでしょうか。


for i in range(len(grades)):
item = grades[i]
name = item[0]
grade = item[1]

print(f"#{i + 1}: {name} は {grade} 点。")

#1: Nana は 90 点。
#2: Saki は 92 点。
#3: Yuka は 82 点。




でも、enumerate() の助けを借りながらアンパックを利用することで、インデックス番号を1つも記述せずに済んじゃいます。


for num, (name, grade) in enumerate(grades, 1):
print(f"#{num}: {name} は {grade} 点。")

#1: Nana は 90 点。
#2: Saki は 92 点。
#3: Yuka は 82 点。