有没有一种方法可以在Python 3+中对嵌套列表进行排序?

时间:2019-11-26 21:32:20

标签: python python-3.x list-comprehension nested-lists

我正在处理嵌套列表,我想知道如何将所有列表按字母顺序排列,同时将它们包含在各自的列表中。

例如,如果我有一个包含品牌名称的嵌套列表:

lst = [['Canada Goose', 'Mackage', 'PJ'], ['GAP', 'Fendi', 'Nike'], ['Gucci', 'Adidas']]

及其输出:

sorted_lst = [['Canada Goose', 'Mackage', 'PJ'], ['Fendi', 'GAP', 'Nike'], ['Adidas', 'Gucci']]

我知道在常规列表中可以使用.sort()方法,但是在这里似乎并非如此。 我也读了Sorting lists inside nested lists,但我似乎听不懂

2 个答案:

答案 0 :(得分:2)

如@SyntaxVoid所评论

sorted_lst = [sorted(x) for x in lst]

应该按照您的要求去做。

要弄清这是怎么回事,是您正在使用生成器生成排序列表的新列表。

[]正如您所知,这是一个列表

和roximmitley上面所做的与写作相似

    sorted_lst = []
    for x in lst:
        sorted_lst.append(sorted(x)) 

您应该阅读https://realpython.com/python-sort/以获得更多帮助,并了解排序方式。

除了更好地理解SyntaxVoid的答案外,我建议您使用Google Python Generator,因为我的解释是一个恰当的示例,并且没有解释我的解释和代码之间的根本区别,即,一个生成广告生成器而另一个生成列表

答案 1 :(得分:2)

AppHandwerker的解决方案创建了一个新的数据结构来保存结果,而原始lst保持不变。如果这是必需的,那么该解决方案是最好的。通常,避免突变也是个好主意,因为它可能导致由aliasing引起的细微错误。

如果您不需要将原始数据保持在未排序的顺序,则可以选择in-place解决方案:就地排序的优点是不需要额外的内存即可分配给保存排序结果的新列表。

for x in lst:
    x.sort()