这看起来很熟悉:).我不打算提供整个解决方案,但这里有一些提示:
如您所知,有两个步骤,反转每个子列表,然后反转外部列表(就地,不创建新列表,因此它将改变全局L).
因此,您可以遍历外部列表,并改变每个子列表:
for i in range(len(L)):
# if L[i] is a list:
# reverse with [::-1] and update L[i] to the reversed version
# reverse the outer list L, list.reverse() will operate in-place on L
现在请记住,如果你像这样遍历列表:
for item in list:
item = 'xxx'
您无法使用上述代码更改项目. item是占位符值,因此更改它实际上不会修改列表.
您需要索引L中的项目,枚举可以帮助解决这个问题,或者您可以使用上面较少优先的范围(len()).
for i, item in enumerate(L):
# do something with L[i]
L[i] = 'something'
编辑:由于对此有如此多的困惑,我将继续发布一个基于Stefan Pochmann非常优雅的答案的工作解决方案:
def deep_reverse(L):
L.reverse()
for sublist in L:
sublist.reverse()
请注意,没有return语句,也没有print语句.这将正确修改L到位.你不能在函数内部重新分配L,因为它只会创建一个新的本地版本的L,它不会修改全局L.你可以使用list.reverse()来修改L,这是根据规范所必需的.