有没有办法对 Python 3+ 中的嵌套列表进行排序?
Is there a way to sort nested lists in Python 3+?
我正在处理嵌套列表,我想知道如何按字母顺序排列所有列表,同时将它们包含在各自的列表中。
例如,如果我有一个包含品牌名称的嵌套列表:
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,好像没看懂
正如@SyntaxVoid 评论的那样
sorted_lst = [sorted(x) for x in lst]
应该按照你的要求去做。
要弄清楚这里发生了什么,您是否正在使用生成器生成新的排序列表列表。
[] 如您所知,这是一个列表
并且近似于上面所做的类似于写作
sorted_lst = []
for x in lst:
sorted_lst.append(sorted(x))
您应该阅读 https://realpython.com/python-sort/ 以获得更多帮助并了解 sort 和 sorted 的工作原理。
为了更好地理解 SyntaxVoid 的回答,我建议您使用 google Python 生成器,因为我的解释是一个合适的示例,并没有解释我的解释和代码之间的潜在差异,也就是说,一个生成一个 d 生成器,另一个生成一个列表。
AppHandwerker 的解决方案创建了一个新的数据结构来保存结果,而原始 lst
保持不变。如果这是一个要求,那么该解决方案是最好的。避免突变通常也是一个好主意,因为它可能导致由 aliasing.
引起的细微错误
如果您不需要以未排序的顺序保留原始数据,这里有一个 in-place 解决方案作为替代方案:就地排序的优点是它不需要额外的内存分配给包含排序结果的新列表。
for x in lst:
x.sort()
我正在处理嵌套列表,我想知道如何按字母顺序排列所有列表,同时将它们包含在各自的列表中。
例如,如果我有一个包含品牌名称的嵌套列表:
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,好像没看懂
正如@SyntaxVoid 评论的那样
sorted_lst = [sorted(x) for x in lst]
应该按照你的要求去做。
要弄清楚这里发生了什么,您是否正在使用生成器生成新的排序列表列表。
[] 如您所知,这是一个列表
并且近似于上面所做的类似于写作
sorted_lst = []
for x in lst:
sorted_lst.append(sorted(x))
您应该阅读 https://realpython.com/python-sort/ 以获得更多帮助并了解 sort 和 sorted 的工作原理。
为了更好地理解 SyntaxVoid 的回答,我建议您使用 google Python 生成器,因为我的解释是一个合适的示例,并没有解释我的解释和代码之间的潜在差异,也就是说,一个生成一个 d 生成器,另一个生成一个列表。
AppHandwerker 的解决方案创建了一个新的数据结构来保存结果,而原始 lst
保持不变。如果这是一个要求,那么该解决方案是最好的。避免突变通常也是一个好主意,因为它可能导致由 aliasing.
如果您不需要以未排序的顺序保留原始数据,这里有一个 in-place 解决方案作为替代方案:就地排序的优点是它不需要额外的内存分配给包含排序结果的新列表。
for x in lst:
x.sort()