我有一个嵌套列表,它根据每个子列表的第一个元素排序:
t = [['2', '5'], ['8', '10'], ['8', '2'], ['8', '5'], ['9', '0']]
现在如何在不影响其他子列表的情况下,按下一个元素对以相同元素开头的子列表进行排序?
例如对 t[1]、t[2] 和 t[3] 进行排序,同时保持其他子列表的顺序:
sort_by_all(t)
>> [['2', '5'], ['8', '2'], ['8', '5'], ['8', '10'], ['9', '0']]
我的逻辑是首先找到所有以相同元素开头的子列表,按第二个元素对它们进行排序,然后以某种方式将它们放回原始列表。
最佳答案
sorted
和 list.sort
都可以按字典顺序排序。换句话说,您可以传入一个返回序列的键。在这种情况下,您希望首先将任何值转换为整数。
t = [['2', '5'], ['8', '10'], ['8', '2'], ['8', '5'], ['9', '0']]
# Create new list
print(sorted(t, key=lambda seq: (int(seq[0]), int(seq[1]))))
# Or, sort in place
t.sort(key=lambda seq: (int(seq[0]), int(seq[1])))
print(t)
# Output
[['2', '5'], ['8', '2'], ['8', '5'], ['8', '10'], ['9', '0']]
[['2', '5'], ['8', '2'], ['8', '5'], ['8', '10'], ['9', '0']]
如果您希望它适用于每个子列表包含两个以上元素的列表,请将键替换为:
lambda seq: [int(i) for i in seq]
关于python - 第一个元素匹配时如何对嵌套列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57127230/