python - 如果元组在 Python 中可以为空,如何按最后一个元素对元组列表进行排序?

标签 python list sorting tuples

需要按最后一个元素对元组列表进行排序,元组可以为空。 如果元组不为空,我知道如何排序:
sorted(lst, key=lambda p: p[-1]);

但是当列表有 () 时:IndexError: tuple index out of range

我找不到如何避免它。

最佳答案

在取最后一个元素之前检查 tuple 是否为空。

sorted(lst, key=lambda p: bool(p) and p[-1])

bool(p) 和 p[-1] 在元组为空时返回 False(计算结果为 0),否则返回最后一个值。

使用这种方法,如果所有值都是正数,则空元组排在排序列表的第一位。它需要更多调整才能使它们在一般情况下出现在第一个或最后一个,仍然可以通过在 lambda 中返回一个 tuple 来实现:

sorted(lst, key=lambda p: (not bool(p),bool(p) and p[-1]))

以下将使空元组排在列表的最后(因为 not 在空时产生 True)

关于python - 如果元组在 Python 中可以为空,如何按最后一个元素对元组列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46463373/

相关文章:

java - Docker 文件 COPY 然后 WORKDIR,但文件位于不同的目录中

python - Pandas - 在 Melted DF 上设置 DateTimeIndex

java - 如何使用用户输入更改对象的名称?

PHP/MySQL - 好友列表 SQL 查询

python - 在 Pypi 上注册一个内部包

python - pycharm使用pyside2类型错误: 'NoneType' object is not callable

python - 更改我正在遍历的列表时的意外行为

php - PrestaShop 对类别中的多个字段进行排序

algorithm - 插入排序比较?

javascript - 基于对象属性对数组进行排序 - Javascript