以下にいくつかのコードを示します: # 質問 9: ディープ リバース # 入力としてリストを取り、 # 入力リストのディープ リバースである新しいリストを返すプロシージャ deep_reverse を定義します。
# これは、リスト内のすべての要素を逆にすることを意味し、それらの要素のいずれかがリスト自体である場合、 # 内側のリスト内のすべての要素を完全に逆にします。
# Note: The procedure must not change the input list.
# The procedure is_list below is from Homework 6. It returns True if
# p is a list and False if it is not.
def is_list(p):
return isinstance(p, list)
#For example,
def deep_reverse(n):
n.reverse()
for entry in n:
if is_list(entry):
entry.reverse()
deep_reverseA(entry)
return n
def deep_reverseA(n):
for entry in n:
if is_list(entry):
entry.reverse()
deep_reverseA(entry)
return n
p = [1, [2, 3, [4, [5, 6]]]]
print deep_reverse(p)
#>>> [[[[6, 5], 4], 3, 2], 1]
print p
#>>> [1, [2, 3, [4, [5, 6]]]]
q = [1, [2,3], 4, [5,6]]
print deep_reverse(q)
#>>> [ [6,5], 4, [3, 2], 1]
print q
#>>> [1, [2,3], 4, [5,6]]
私の問題は、コードを実行すると p と q の値が変わることです。それらを変更しないようにするにはどうすればよいですか。Python ではインデックスが接続されていることを知っているので、indexA = indexB で indexA を変更すると、indexB が変更されます。それが、この問題を修正する際に私が抱えている問題です。