需要按最后一个元素对元组列表进行排序,元组可以为空。
如果元组不为空,我知道如何排序:
sorted(lst, key=lambda p: p[-1]);
但是当列表有()
时:IndexError: tuple index out of range
。
我找不到如何避免它。
答案 0 :(得分:5)
在获取最后一个元素之前,检查tuple
是否为空。
sorted(lst, key=lambda p: bool(p) and p[-1])
bool(p) and p[-1]
在元组为空时返回False
(计算结果为0),否则返回最后一个值。
使用该方法,如果所有值都为正,则空元组在排序列表中排在第一位。它需要更多的调整才能使它们在通用情况下显示为第一个或最后一个,仍然可以通过在lambda中返回tuple
来实现:
sorted(lst, key=lambda p: (not bool(p),bool(p) and p[-1]))
以下内容将使空元组在列表中排在最后(因为空not
会产生True