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