鱼C论坛

 找回密码
 立即注册
查看: 2427|回复: 4

[已解决]python 排序的问题!!!

[复制链接]
发表于 2023-3-23 10:42:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在网上找个排序的代码,
排序是正常的
但是有个问题,
就是序号的数字是字符
就无法按照数字的大小进行排序
而是按数字的第1位进行排序:
如:14,15,20,25,26,4,41,5,51

想了半天也没有发现问题在哪里???
请教高手,谢谢!!!


代码如下:
def treeview_sort_column(tv, col, reverse):  # Treeview、列名、排列方式
    l = [(tv.set(k, col), k) for k in tv.get_children('')]
    #print(tv.get_children(''))
    l.sort(reverse=reverse)  # 排序方式
    # rearrange items in sorted positions
    for index, (val, k) in enumerate(l):  # 根据排序后索引移动
        tv.move(k, '', index)
       # print(k)
    tv.heading(col, command=lambda: treeview_sort_column(tv, col, not reverse))  # 重写标题,使之成为再点倒序的标题

最佳答案
2023-3-23 10:49:38
那是因为字符串比较大小就是从第一个字符开始比较unicode码值,只要能比出个结果就不往后继续比较了

你把整数字符串转成整数类型就好

def treeview_sort_column(tv, col, reverse):  # Treeview、列名、排列方式
    l = [(tv.set(k, col), int(k)) for k in tv.get_children('')]
    #print(tv.get_children(''))
    l.sort(reverse=True)  # 排序方式
    # rearrange items in sorted positions
    for index, (val, k) in enumerate(l):  # 根据排序后索引移动
        tv.move(k, '', index)
       # print(k)
    tv.heading(col, command=lambda: treeview_sort_column(tv, col, not reverse))  # 重写标题,使之成为再点倒序的标题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-23 10:49:38 | 显示全部楼层    本楼为最佳答案   
那是因为字符串比较大小就是从第一个字符开始比较unicode码值,只要能比出个结果就不往后继续比较了

你把整数字符串转成整数类型就好

def treeview_sort_column(tv, col, reverse):  # Treeview、列名、排列方式
    l = [(tv.set(k, col), int(k)) for k in tv.get_children('')]
    #print(tv.get_children(''))
    l.sort(reverse=True)  # 排序方式
    # rearrange items in sorted positions
    for index, (val, k) in enumerate(l):  # 根据排序后索引移动
        tv.move(k, '', index)
       # print(k)
    tv.heading(col, command=lambda: treeview_sort_column(tv, col, not reverse))  # 重写标题,使之成为再点倒序的标题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-3-23 15:24:23 | 显示全部楼层
isdkz 发表于 2023-3-23 10:49
那是因为字符串比较大小就是从第一个字符开始比较unicode码值,只要能比出个结果就不往后继续比较了

你 ...

刚试了,这 样子不行呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-23 15:32:19 | 显示全部楼层
pysunred 发表于 2023-3-23 15:24
刚试了,这 样子不行呢

你就说 14,15,20,25,26,4,41,5,51 这些数字是属于哪个变量的吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-23 15:54:59 | 显示全部楼层
试一下如下代码:
def treeview_sort_column(tv, col, reverse):  # Treeview、列名、排列方式
    l = [(int(tv.set(k, col)), k) for k in tv.get_children('')]
    l.sort(reverse=reverse)  # 排序方式
    # rearrange items in sorted positions
    for index, (val, k) in enumerate(l):  # 根据排序后索引移动
        tv.move(k, '', index)
    tv.heading(col, command=lambda: treeview_sort_column(tv, col, not reverse))  # 重写标题,使之成为再点倒序的标题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-30 01:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表