2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Python] 要素のスワップについてのメモ

Last updated at Posted at 2022-03-26

はじめに

プログラミングの勉強としてアルゴリズム関連の本を読んでいるのですが、バブルソートか何かの話で2つの要素をスワップする際のコードを見て「そんなことできるんだ」と思ったので、関連知識も含めてのメモです。

どういうことかというと

python.py
>>> l=[1, 0]

>>> print(l)
[1, 0]

最も単純化し、こんな配列を考えてみます。この二つの要素をスワップしたいとします。
誠実な方法としては、以下のような書き方が考えられます。

python.py
>>> l[0] = temp0
>>> l[1] = temp1

>>> l[0] = temp1
>>> l[1] = temp0

>>> print(l)
[0, 1]

エレガントではないですね。
そんなとき、Pythonなら以下のように書けるということです。

python.py
>>> l[0], l[1] = l[1], l[0]

>>> print(l)
[0, 1]

#もしくは、2変数なら
>>> a, b = 1, 0
>>> a, b = b, a

>>>print(a, b)
0, 1

どういう仕組みになっているのでしょうか。
参考になりそうな記事を見つけたので紹介させていただきます。(https://www.haya-programming.com/entry/2018/09/19/195828)

3つまではスタックを用いた高速な処理を行うよう最適化されている。
4つ以上ある場合は(たぶん最適化を実装するのが面倒くさいので)tupleにしてシーケンスアンパックで処理する。

ちゃんと想定された動作のようなので、エレガントな記述を気兼ねなく使えます。

もちろん、以下のように書くと見た目通りの処理が行われるので、注意が必要です。

python.py
>>> l[0] = l[1]
>>> l[1] = l[0]

>>> print(l)
[0, 0]
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?