pysunred 发表于 2023-3-23 10:42:27

python 排序的问题!!!

在网上找个排序的代码,
排序是正常的
但是有个问题,
就是序号的数字是字符
就无法按照数字的大小进行排序
而是按数字的第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))# 重写标题,使之成为再点倒序的标题

isdkz 发表于 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))# 重写标题,使之成为再点倒序的标题

pysunred 发表于 2023-3-23 15:24:23

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

你 ...

刚试了,这 样子不行呢

isdkz 发表于 2023-3-23 15:32:19

pysunred 发表于 2023-3-23 15:24
刚试了,这 样子不行呢

你就说 14,15,20,25,26,4,41,5,51 这些数字是属于哪个变量的吧

ouyunfu 发表于 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))# 重写标题,使之成为再点倒序的标题
页: [1]
查看完整版本: python 排序的问题!!!