Python(プログラミング全般)初心者です。
ある配列S(S= [3,6,9,9,12])を求めた後、Sから要素を前から順番に一つだけ除いた配列を作りたいと思い、こう書いてみました。
==========
for i in range(len(S)):
T = S
T.pop(i) #del T[i]でも同じ結果
print(T)
==========
本当はこんな(↓)出力が欲しかったのですが
[6, 9, 9, 12]
[3, 9, 9, 12]
[3, 6, 9, 12]
[3, 6, 9, 12]
[3, 6, 9, 9]
実際はこんな(↓)エラーが出ました。
[6, 9, 9, 12]
[6, 9, 12]
[6, 9]
T.pop(i)
IndexError: pop index out of range
試してみると、T.pop(i)(またはdel T[i])をすると、なぜか元の配列Sの要素まで同じように削除されているようです。これを回避するには、3行目の「T=S」を「T= [3,6,9,9,12]」に置き換えれば良いのですが、今回の配列Sは別のスクリプトで求めたてきたので、それをループの中で毎回求めさせるのは非効率な気がします。そこで質問ですが、
1)なぜ「T.pop()」や「del T[]」でSまで変わってしまうのでしょうか?
2)Sを変化させずに、要素削除された新しい配列Tを作る方法はありますか?
Pythonを始めたばかりで基本がわかっていないと自覚しています。ご教示いただけたら幸いです。よろしくお願いします。

回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/02/16 14:59