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

mar*_*rar 1 python sorting tuples list

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

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

我找不到如何避免它.

Jea*_*bre 5

tuple在获取最后一个元素之前,检查它是否为空.

sorted(lst, key=lambda p: bool(p) and p[-1])
Run Code Online (Sandbox Code Playgroud)

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

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

sorted(lst, key=lambda p: (not bool(p),bool(p) and p[-1]))
Run Code Online (Sandbox Code Playgroud)

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