免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1472 | 回复: 2
打印 上一主题 下一主题

关于排序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-14 22:00 |只看该作者 |倒序浏览
我有一个Table,其中第一行是title,比如是9N, 11N,9T,13N,11T ... 这样的数字,总共100个,然后从第二行开始是数据,由于之前第一行的title行是混乱的,我想重新排序。可以拍成 先N后T, 也可以排列成按照前面的数字,这个无所谓。如果选定一种排序后,就记下这个是如何调整的排序,对下面的每一行的数据也进行对应的调整。

用python 该如何做到呢? 换句话说,就是一个表格,按照列进行重排序。

论坛徽章:
0
2 [报告]
发表于 2012-12-15 02:18 |只看该作者
我之前看过一些例子,都是将其拷贝到列表,然后排序,再将排序好的数据一个一个插入列表框或Table回来的。
python有一个标准库copy,可以方便的拷贝。

论坛徽章:
1
辰龙
日期:2014-05-22 11:38:58
3 [报告]
发表于 2012-12-15 11:24 |只看该作者
  1. [winway@s208 test]$ cat urfile   
  2. 9N  11N 9T  13N
  3. 9N1  11N1 9T1  13N1
  4. 9N2  11N2 9T2  13N2
  5. 9N3  11N3 9T3  13N3
  6. 9N4  11N4 9T4  13N4
  7. 9N5  11N5 9T5  13N5
  8. [winway@s208 test]$ ./test.py  
  9. 9N 9T 11N 13N
  10. 9N1 9T1 11N1 13N1
  11. 9N2 9T2 11N2 13N2
  12. 9N3 9T3 11N3 13N3
  13. 9N4 9T4 11N4 13N4
  14. 9N5 9T5 11N5 13N5
  15. [winway@s208 test]$ cat test.py
  16. #! /bin/env python
  17. # -*- coding: utf-8 -*-
  18. #

  19. is_1stline = 1
  20. order_map = {}

  21. def mycmp(x, y):
  22.     xn = int(x[:-1])
  23.     yn = int(y[:-1])
  24.     return cmp(xn, yn)

  25. with open('urfile', 'r') as f:
  26.     for l in f:
  27.         li = l.split()
  28.         if is_1stline:
  29.             is_1stline = 0
  30.             tmp_dict = {}
  31.             for n, r in enumerate(li):
  32.                 tmp_dict[r] = n
  33.             li.sort(mycmp)
  34.             for n, r in enumerate(li):
  35.                 order_map[n] = tmp_dict[r]
  36.             print ' '.join(li)
  37.         else:
  38.             for i in xrange(len(li)):
  39.                 print li[order_map[i]],
  40.             print
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP