如何反转列表下的列表?

时间:2017-02-11 19:14:16

标签: python python-3.x logic

我想要反转列表,但它不是普通的列表。它有自己的列表项。例如:

[[0, 1, 2], [1, 2, 3]]

我制作了一个程序,你可以看到它,但它没有给我正确的输出。

def deep_reverse(L):
    if len(L) > 1:
        x=len(L)
        i=0
        for i in range(x):
            L[i].reverse()
    else:
        L.reverse()
    return L

并且在执行后它给出了这个结果:

[[2, 1, 0], [3, 2, 1]]

但是输出错误,正确的是:

[[3, 2, 1], [2, 1, 0]]

我只是错过了非常普通的事情,但因为我是一名噪音程序员,所以我没有足够的知识。非常感谢你的帮助。

请使用-VE NUMBERS检查您的代码

4 个答案:

答案 0 :(得分:3)

使用列表理解:

$ docker run -it -v VOLUME_PATH:/var/lib/mysql OTHER_OPTIONS_HERE image_name /bin/sh

我不确定你的尝试但是:

l = [[0, 1, 2], [1, 2, 3]]

c = [x[::-1] for x in l[::-1]] # [[3, 2, 1], [2, 1, 0]]

答案 1 :(得分:1)

使用列表理解和索引:

old_list = [[0, 1, 2], [1, 2, 3]]
# reversed(old_list) = [[1,2,3],[0,1,2]]
new_list = [item[::-1] for item in reversed(old_list)]
new_list
# [[3, 2, 1], [2, 1, 0]]

答案 2 :(得分:0)

您应该在所有情况下撤消包含列表的列表,而不仅仅是条件len(L) > 1False,只需对以下内容进行简短更改:

def deep_reverse(L):
    if len(L) > 1:
        x=len(L)
        i=0
        for i in range(x):
            L[i].reverse()
    L.reverse()

由于此功能会更改列表和子列表就地,因此您不需要return语句(L.reverse()返回None )。

答案 3 :(得分:0)

使用列表理解的更优雅的解决方案,其中l是您的初始列表:

In [5]: list(reversed([list(reversed(x)) for x in l]))
Out[5]: [[3, 2, 1], [2, 1, 0]]