Python問題集を解いてみよう!!

Pythonクイズ No.9

当ページのリンクには広告が含まれています。
PythonクイズNo.9
目次

問題

次のコードを実行した時の出力として正しいものは A 〜 D のどれでしょうか?

解答

正解は。。。

正解は D

[1, 2, 3, 4]
[[1, 2, 3, 4], [1, 2, 3, 4]]

です。

解説

今回はリストの問題です。

list_bはリスト内包表記を用いてlist_aを要素に2つ持つリストになっています。

この書き方だとlist_alist_bの要素のリストは同じオブジェクトになります。

同じオブジェクトなので、list_aに要素を追加すると、list_bの要素のリストも同じオブジェクトなので、出力すると4が追加されています。

これを避けたい場合、list_aにだけ4が追加されるようにしたい場合、スライス操作を使う方法とcopyモジュールを使う方法があります。

スライス操作を使う

スライス操作を使う場合、次のように書けます。

list_a = [1, 2, 3]
list_b = [list_a[:] for _ in range(2)]

list_a.append(4)
list_b[0].append(999)

print(list_a)
print(list_b)
上記コードの実行結果
[1, 2, 3, 4]
[[1, 2, 3, 999], [1, 2, 3]]

copy モジュールを使う

copyモジュールは Python に標準で備わっているモジュールです。

copyモジュールを使う場合は次のように書けます。

import copy

list_a = [1, 2, 3]
list_b = [copy.copy(list_a) for _ in range(2)]

list_a.append(4)
list_b[0].append(999)

print(list_a)
print(list_b)
上記コードの実行結果
[1, 2, 3, 4]
[[1, 2, 3, 999], [1, 2, 3]]

リストについて理解を深めたい方は下記記事にも目を通してみてください。

Google Colaboratory

下記リンクからアクセスして、Google Colaboratory 上で実際にコードを実行して、結果を確認していただけます。

おわりに

X で Python クイズを配信しています。

よかったらフォローしてください!

以上です。

スポンサーリンク

PythonクイズNo.9

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次