python - 第一个元素匹配时如何对嵌套列表进行排序?

标签 python algorithm sorting

我有一个嵌套列表,它根据每个子列表的第一个元素排序:

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']]

我的逻辑是首先找到所有以相同元素开头的子列表,按第二个元素对它们进行排序,然后以某种方式将它们放回原始列表。

最佳答案

sortedlist.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/

相关文章:

javascript - Python Selenium 或常规 Javascript,选择伪下拉列表的列表元素选项?

python - 为什么 'pip install json'显示版本错误

database - 显示与搜索与数据库中的排序字符串

python - 给定一个长数字字符串数组,将它们按升序排序

postgresql - ORDER BY PostgreSQL 中的复杂表达式

python - 如何使用 Pandas DataFrame 有效地映射值(来自 CSV 文件)?

python - 如何从日期时间文件中获取 numpy ndarray 并使用 matplotlib 绘制差异?

algorithm - 使用 BFS 检查循环图

algorithm - 你能用大 O 符号做加法/乘法吗?

python - Porter Stemmer 算法没有返回预期的输出?修改成def时