为什么列表排序不正确?

2024-09-27 09:25:23 发布

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

当我对列表列表应用sortsorted时,Python不能正确排序。
例如,我想按B1, B2, ..., B10, B11, ...排序 但是Python按B1, B10, B11, B2, B20, B21, ...排序 名单比我放在这里的要大。你知道吗

 def getKey(item):
     return item[0]

l = [['B3', '08:20', '08:50', ('LH233', 'Berlin', '08:20', '112', '203')], ['B10', '08:40', '08:55', ('AF76', 'Toulouse', '08:40', '57', '102')]]

l.sort(key=getKey) OR sorted(l, key=getKey)

Returns:

[['B10', '08:40', '08:55', ('AF76', 'Toulouse', '08:40', '57', '102')], ['B3', '08:20', '08:50', ('LH233', 'Berlin', '08:20', '112', '203')]]

Tags: 列表排序itemsortb2b1b3sorted
3条回答

这是因为,根据Python,102之前,因为在您的示例中,实际上是在进行字符串比较,而不是数字比较。一种解决方案是将string-numbers转换成数字。你知道吗

这是因为键是按字典顺序排序的字符串。要按所需顺序排序,需要整数键。下面给出了一种获取这些信息的方法。你知道吗

>>> l = [['B3', '08:20', '08:50', ('LH233', 'Berlin', '08:20', '112', '203')], ['B10', '08:40', '08:55', ('AF76', 'Toulouse', '08:40', '57', '102')]]
>>> sorted(l, key=lambda x:int(x[0][1:]))
[['B3', '08:20', '08:50', ('LH233', 'Berlin', '08:20', '112', '203')], ['B10', '08:40', '08:55', ('AF76', 'Toulouse', '08:40', '57', '102')]]

你需要把“B3”和“B10”变成整数,3和10例如:

def getKey(item):    
    return int(item[0][1:])

相关问题 更多 >

    热门问题