在使用关键参数(Lamda : x)学习排序时,我有一个问题。
我知道我可以使用关键参数来确定对齐条件。就像下面一样。
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.发布于 2021-06-02 16:29:52
在列表上运行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()不会扰乱列表中的元素,因此不可能调用sort并将[8, 9, 1]元素从第二行移动到第一行。
还可以对包含无括号、双括号和三括号的元素进行排序吗?
是的,只要您能够提供一个key函数,该函数可以接受所有顶级列表元素,并返回一些给出排序顺序的内容:
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]]]
https://stackoverflow.com/questions/67808444
复制相似问题