私はPythonにいくつか問題があります。私はあなたがしていることは他の言語でもわかりやすく、非常に論理的であることを知っています。しかし、Pythonでは、appending
a list
とdata
から新しいlist
へと単純にが参照またはポインタを保持し、その結果、元のリストに加えられた変更は新しいリストで明らかになります。ポインタや参照なしでリストを追加する
私はcopy.copy(list[:])
について聞いたことがありますが、これはうまくいくとは100%確信していません。あなたは list_1 を変更する場合、彼らは同じリストを指しているので
list_1 = [1, 2, 3]
new_list = []
new_list.append(list_1[:])
しかし、あなたはまた、new_listを変更します。
>>> list_1.append(4)
>>> print list_1
[1, 2, 3, 4]
>>> print new_list
[1, 2, 3, 4]
これはすべて私にとって迷惑です。誰かがより良い方法を知っているなら、教えてください。
私はこのようなnew_list埋めるように私は、list_1に変更を加えるとnew_listにappend
に続けることができるようにしたい:
new_list
[0] >>>
[1, 2, 3, 4]
[1] >>>
[5, 6, 7, 8]
そして、時には最初のリストをこの例で請求されているものよりも大きくなる可能性があります。
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:01:18) [MSC v.1900 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> list_1 = [1,2,3]
>>> new_list = []
>>> new_list.append(list_1[:])
>>> print new_list
SyntaxError: Missing parentheses in call to 'print'
>>> print(new_list)
[[1, 2, 3]]
>>> list_1.append(4)
>>> print(new_list)
[[1, 2, 3]]
>>> print(new_list)
[[1, 2, 3]]
>>> print(list_1)
[1, 2, 3, 4]
ストレンジ:
は現在、テストランを行いました。奇妙な。奇妙な。
'new_list.append(list_1の[:])' => 'new_list = [[1、2、3]]'。 '[:]' _はコピーを作成するので、私はあなたの質問を理解していません。私たちは[mcve]が必要です –
なぜnew_listにネストされたリストを取得できませんでしたか?このコードは正しく理解していれば動作します。 – martianwars
@ Jean-FrançoisFabre、このコードにはMCVがあります。自分のコード例を参照してください。 – haxxir411