【问题标题】:Sorting a list of lists in a list对列表中的列表进行排序
【发布时间】:2018-12-22 08:33:54
【问题描述】:

假设我在一个列表中有一个列表,它包含在一个列表中。例如:

foo = [[[2, 2, 2], [1, 1, 1], [3, 3, 3]], [[2, 2, 2], [1, 1, 1], [3, 3, 3]]]

我想按顺序排序:

foo = [[[1, 1, 1], [2, 2, 2], [3, 3, 3]], [[1, 1, 1], [2, 2, 2], [3, 3, 3]]]

我可以使用[sorted(i) for i in foo] 来实现这一点。但是,是否有某种方法可以在没有列表理解(或创建新列表)的情况下对该列表进行排序?

列表本身的值会改变,但不需要排序。

我所尝试的一切都归结为与上述相同的方法。

【问题讨论】:

  • 如果你真的需要这样做,你可能应该使用多索引熊猫数据帧
  • Pandas 似乎完全是矫枉过正,所以使用列表理解可能会更好,如果该方法是最好的替代方法@Nickpick
  • for i in range(len(foo)): foo[i].sort() 发生了什么?
  • 列表理解到底有什么问题?您也可以使用sort 方法对外部列表中的每个列表进行排序。
  • @RoryDaulton 确实,没什么,但是我对不创建全新列表的替代方案感兴趣。

标签: python python-3.x list sorting


【解决方案1】:

如果您想避免创建新列表,只需遍历列表并调用 .sort()

>>> foo = [[[2, 2, 2], [1, 1, 1], [3, 3, 3]], [[2, 2, 2], [1, 1, 1], [3, 3, 3]]]

for i in foo:
    i.sort()

>>> foo                                                                         
[[[1, 1, 1], [2, 2, 2], [3, 3, 3]], [[1, 1, 1], [2, 2, 2], [3, 3, 3]]]

【讨论】:

    【解决方案2】:

    如果您不介意创建一个新列表,那么使用map 函数怎么样:

    In [1]: foo = [[[2, 2, 2], [1, 1, 1], [3, 3, 3]], [[2, 2, 2], [1, 1, 1], [3, 3, 3]]]
    
    In [2]: list(map(sorted, foo))
    Out[2]: [[[1, 1, 1], [2, 2, 2], [3, 3, 3]], [[1, 1, 1], [2, 2, 2], [3, 3, 3]]]
    

    【讨论】:

    • 你的答案没有解决但是有没有办法在没有列表理解(或创建一个新列表)的情况下对这个列表进行排序?
    • 你在说什么?您在我的回答中在哪里看到列表理解?至于创建一个新列表,我已经在第一行提到了。
    • 没有列表理解或创建一个新列表?您基本上是在创建一个没有解决问题的新列表。
    • 好的,你想出了一个更好的答案。我不是在这里追逐选票。我只是想尽我所知通过添加更多选项来丰富帖子。
    • 如果是这样就好了。不用生气,我只是评论你的答案。我也试图想出一个更好的答案,但我想我找不到比 AK47 更好的答案了!
    猜你喜欢
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多