如何根据属性之间的差异对包含namedtuple的列表进行排序?

2024-04-20 01:17:22 发布

您现在位置:Python中文网/ 问答频道 /正文

Segment = namedtuple('Segment', 'start end')
segments = [Segment(start=9, end=1), Segment(start=1, end=3), Segment(start=2, end=5), Segment(start=3, end=6)]

我尝试使用以下代码对列表进行排序:

sorted(segments, key = lambda s: s.end - s.start)

但这行不通。我该怎么做?你知道吗

预期产量:

[Segment(start=3, end=6), Segment(start=2, end=5), Segment(start=1, end=3), Segment(start=9, end=1)]

Tags: lambdakey代码列表排序segmentnamedtuplestart
1条回答
网友
1楼 · 发布于 2024-04-20 01:17:22

您需要指定您想要的“sequence”在end < startend - start < 0之前,同样在有许多segments与该条件匹配的情况下,应该优先考虑具有最高end值的“sequence”。你知道吗

>>> from collections import namedtuple
>>> Segment = namedtuple('Segment', 'start end')
>>> segments = [Segment(start=9, end=1), Segment(start=1, end=3), Segment(start=2, end=5), Segment(start=3, end=6)]
>>> sorted(segments, key=lambda s: (s.end < s.start, -s.end))
[Segment(start=3, end=6), Segment(start=2, end=5), Segment(start=1, end=3), Segment(start=9, end=1)]

相关问题 更多 >