我写了一个Python函数来反转嵌套列表:
def ReverseList(inputlist,parent=[]):
if len(inputlist)==0:
tem_out=parent[:]
return tem_out
else:
next_i=inputlist[-1]
if type(next_i) == list:
parent.append(ReverseList(next_i,[]))
else:
parent.append(next_i)
temp_par=parent[:]
return ReverseList(inputlist[:-1],temp_par)
print(ReverseList([1,2,[11,22],3,5]))
print(ReverseList([1,2,[11,22],3,5]))
print(ReverseList([1,2,[11,22],3,5]))
print(ReverseList([1,2,[11,22],3,5]))
在最后4行中,我用相同的输入重复调用了相同的函数。它给出以下输出:
[5, 3, [22, 11], 2, 1]
[5, 5, 3, [22, 11], 2, 1]
[5, 5, 5, 3, [22, 11], 2, 1]
[5, 5, 5, 5, 3, [22, 11], 2, 1]
仅在第一个输出中显示正确答案。
为什么每次调用该函数时都添加相同的元素?
答案 0 :(得分:1)
自变量列表中的表达式parent=[]
被认为是危险的默认值,因为它默认为容器,因此出于某种原因应避免使用你发现了。相反,我们可以将parent
初始化为None
并进行测试,并根据需要将其设为空列表:
def reverseList(inputList, parent=None):
if parent is None:
parent = []
if not inputList:
return parent
*head, tail = inputList
if isinstance(tail, list):
parent.append(reverseList(tail))
else:
parent.append(tail)
return reverseList(head, parent)
if __name__ == '__main__':
array = [1, 2, [11, 22], 3, 5]
print(array)
print(reverseList(array))
print(reverseList(array))
print(reverseList(array))
print(reverseList(array))
print(array)
还请注意使用某些Python3语法和首选的isinstance
测试。