【问题标题】:How do I reverse list under the list?如何在列表下反转列表?
【发布时间】:2017-02-11 19:14:15
【问题描述】:

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

[[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 数字检查您的代码

【问题讨论】:

  • 什么是“-VE 数字”

标签: python python-3.x logic


【解决方案1】:

使用列表推导:

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

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

我不确定你尝试了什么,但是:

l = [[1, 2], [3, -4], [-5, 6, 7]]
c = [x[::-1] for x in l[::-1]] # [[7, 6, -5], [-4, 3], [2, 1]]

【讨论】:

  • 尊敬的先生,您的程序错误!只需检查给定的列表 [[1, 2], [3, -4], [-5, 6, 7]] 这个输入输出应该是 [[7, 6, -5], [3, -4] , [2, 1]] 但它给出了这个输出 [[7, 6, -5], [-4, 3], [2, 1]]
  • 为什么第二个元素没有反转?!
  • 因为它是排序的,但顺序相反。请查看我在程序中给出的输出。
  • @DrQaimMehdi 这个问题与排序无关。这只是关于逆转。这个答案是做什么的(所有其他人也是如此)。
【解决方案2】:

使用列表理解和索引:

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]]

【讨论】:

    【解决方案3】:

    您应该反转包含列表的列表在所有情况下,而不仅仅是条件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)。

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-08
        • 2020-12-02
        • 1970-01-01
        相关资源
        最近更新 更多