需要按最后一个元素对元组列表进行排序,元组可以为空。
如果元组不为空,我知道如何排序:
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/