我如何对多维列表进行排序?
how can i sort a list of Multidimension?
在学习使用键参数(Lamda x: x)进行排序时,我有一个问题。
我明白了,我可以使用key参数来判断对齐条件。如下所示。
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(sorted(list1, key=lambda x: -x))
>> [9, 8, 7, 6, 5, 4, 3, 2, 1]
我也知道在双括号列表中是可能的。
list2 = [[1,9], [2,8], [3,7], [4,6], [5,5], [6,4]]
print(sorted(list2, key=lambda x: x[1]))
>> [[6, 4], [5, 5], [4, 6], [3, 7], [2, 8], [1, 9]]
我很好奇的是,我可以在三括号列表中设置对齐条件吗?
例如,如何按第三个元素的升序对下面的列表进行排序?
list3 = [[[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]], [[5, 6, 7], [6, 7, 8], [7, 8, 9], [8, 9, 1]]]
# possible to sort it like below? in order of third element of Triple square brackets
>> [[[8, 9, 1], [1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]], [[5, 6, 7], [6, 7, 8], [7, 8, 9]]]
此外,是否可以对包含无括号、双括号和三括号元素的列表进行排序?
像
list4 = [ 5, 1, 3, [ [[4],[5]], [6] ], [1,2,3], [1,[2,3]]]
>> [ 5, 1, 3, [1,2,3], [1,[2,3]], [ [[4],[5]], [6] ]] # The order is from the lower list.
当您在列表中 运行 sort()
时,您所做的只是对该列表顶层的 元素进行排序.
在 list3
中,顶层的元素本身就是列表的列表。
list3 = [
[[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]],
[[5, 6, 7], [6, 7, 8], [7, 8, 9], [8, 9, 1]]
]
您可以通过调用 sorted(list3, key=...)
翻转这两行,但您不能更改这些行中列表的顺序。为此,您还必须遍历 list3
和 sort()
中的每个列表。
请记住,sort()
不会混淆列表的元素,因此无法调用排序并将 [8, 9, 1]
元素从第二行移动到第一行。
Also, is it possible to sort lists contain element with no brackets, double brackets, and triple brackets?
是的,只要你能提供一个 key
函数,它可以获取所有顶级列表元素和 return 给出排序顺序的东西:
list4 = [
5,
1,
3,
[[[4], [5]], [6]],
[1, 2, 3],
[1, [2, 3]]
]
您的 key
函数需要能够将上面每一行中的任何值作为输入。例如,如果您要说排序顺序由该元素中的最大数字给出,而不管它有多深,您可以这样做:
# Given a multidimensional list, flatten it into a single dimension
def flatten_list(lst):
flat_list = []
for element in lst:
if isinstance(element, list):
flat_list.extend(flatten_list(element))
else:
flat_list.append(element)
return flat_list
def flattened_sort_order(item):
# If the item is a list, return the max() of the flattened list
if isinstance(item, list):
return max(flatten_list(item))
# Otherwise return the item itself
else:
return item
现在,sorted(list4, key=flattened_sort_order)
得到 [1, 3, [1, 2, 3], [1, [2, 3]], 5, [[[4], [5]], [6]]]
在学习使用键参数(Lamda x: x)进行排序时,我有一个问题。
我明白了,我可以使用key参数来判断对齐条件。如下所示。
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(sorted(list1, key=lambda x: -x))
>> [9, 8, 7, 6, 5, 4, 3, 2, 1]
我也知道在双括号列表中是可能的。
list2 = [[1,9], [2,8], [3,7], [4,6], [5,5], [6,4]]
print(sorted(list2, key=lambda x: x[1]))
>> [[6, 4], [5, 5], [4, 6], [3, 7], [2, 8], [1, 9]]
我很好奇的是,我可以在三括号列表中设置对齐条件吗?
例如,如何按第三个元素的升序对下面的列表进行排序?
list3 = [[[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]], [[5, 6, 7], [6, 7, 8], [7, 8, 9], [8, 9, 1]]]
# possible to sort it like below? in order of third element of Triple square brackets
>> [[[8, 9, 1], [1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]], [[5, 6, 7], [6, 7, 8], [7, 8, 9]]]
此外,是否可以对包含无括号、双括号和三括号元素的列表进行排序?
像
list4 = [ 5, 1, 3, [ [[4],[5]], [6] ], [1,2,3], [1,[2,3]]]
>> [ 5, 1, 3, [1,2,3], [1,[2,3]], [ [[4],[5]], [6] ]] # The order is from the lower list.
当您在列表中 运行 sort()
时,您所做的只是对该列表顶层的 元素进行排序.
在 list3
中,顶层的元素本身就是列表的列表。
list3 = [
[[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]],
[[5, 6, 7], [6, 7, 8], [7, 8, 9], [8, 9, 1]]
]
您可以通过调用 sorted(list3, key=...)
翻转这两行,但您不能更改这些行中列表的顺序。为此,您还必须遍历 list3
和 sort()
中的每个列表。
请记住,sort()
不会混淆列表的元素,因此无法调用排序并将 [8, 9, 1]
元素从第二行移动到第一行。
Also, is it possible to sort lists contain element with no brackets, double brackets, and triple brackets?
是的,只要你能提供一个 key
函数,它可以获取所有顶级列表元素和 return 给出排序顺序的东西:
list4 = [
5,
1,
3,
[[[4], [5]], [6]],
[1, 2, 3],
[1, [2, 3]]
]
您的 key
函数需要能够将上面每一行中的任何值作为输入。例如,如果您要说排序顺序由该元素中的最大数字给出,而不管它有多深,您可以这样做:
# Given a multidimensional list, flatten it into a single dimension
def flatten_list(lst):
flat_list = []
for element in lst:
if isinstance(element, list):
flat_list.extend(flatten_list(element))
else:
flat_list.append(element)
return flat_list
def flattened_sort_order(item):
# If the item is a list, return the max() of the flattened list
if isinstance(item, list):
return max(flatten_list(item))
# Otherwise return the item itself
else:
return item
现在,sorted(list4, key=flattened_sort_order)
得到 [1, 3, [1, 2, 3], [1, [2, 3]], 5, [[[4], [5]], [6]]]