2005年08月16日 星期二 09:43
请问如何将二维的元组排序 比如t1=((a1,b1),(a2,b2),(a3,b3),),a1,b1...可能是数字、英文字母或者中文等 现要求根据第一个元素或者第二个元素按照某种规律(比如大小)排序,生成新的元组或者list 请问各位有什么好的办法? -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050816/c504ebb3/attachment.htm
2005年08月15日 星期一 10:40
如果是2.4可以这样,速度快些: c.sort(key = lambda x:x[0]) c.sort(key = lambda x:x[1]) 2.3版没有这个参数 ----- Original Message ----- From: watchsun To: python-chinese at lists.python.cn Sent: Tuesday, August 16, 2005 10:28 AM Subject: Re: [python-chinese] 关于元组的排序 多谢楼上,看来要多看看文档,多多了解sort的用法 在05-8-16,nicran <nicran at gmail.com> 写道: def mysort(a, b): return cmp(a[1], b[1]) t1=((a1,b1),(a2,b2),(a3,b3)) l1 = list(t1) # 根据第二个元素排序 print l1.sort(mysoft) # 根据第一个元素排序 print l1.sort() 在 05-8-16,watchsun< watchsun at gmail.com> 写道: > 请问如何将二维的元组排序 > 比如t1=((a1,b1),(a2,b2),(a3,b3),),a1,b1...可能是数字、英文字母或者中文等 > 现要求根据第一个元素或者第二个元素按照某种规律(比如大小)排序,生成新的元组或者list > 请问各位有什么好的办法? > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > > > _______________________________________________ python-chinese list python-chinese at lists.python.cn http://python.cn/mailman/listinfo/python-chinese ------------------------------------------------------------------------------ _______________________________________________ python-chinese list python-chinese at lists.python.cn http://python.cn/mailman/listinfo/python-chinese -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050815/7d48db2f/attachment.html
2005年08月16日 星期二 09:51
在 05-8-16,watchsun<watchsun at gmail.com> 写道: > 请问如何将二维的元组排序 > 比如t1=((a1,b1),(a2,b2),(a3,b3),),a1,b1...可能是数字、英文字母或者中文等 > 现要求根据第一个元素或者第二个元素按照某种规律(比如大小)排序,生成新的元组或者list > 请问各位有什么好的办法? 如果说是list的话可以自己写个比较函数,然后sort()一下。
2005年08月16日 星期二 10:10
def mysort(a, b): return cmp(a[1], b[1]) t1=((a1,b1),(a2,b2),(a3,b3)) l1 = list(t1) # 根据第二个元素排序 print l1.sort(mysoft) # 根据第一个元素排序 print l1.sort() 在 05-8-16,watchsun<watchsun at gmail.com> 写道: > 请问如何将二维的元组排序 > 比如t1=((a1,b1),(a2,b2),(a3,b3),),a1,b1...可能是数字、英文字母或者中文等 > 现要求根据第一个元素或者第二个元素按照某种规律(比如大小)排序,生成新的元组或者list > 请问各位有什么好的办法? > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > > >
2005年08月16日 星期二 10:28
多谢楼上,看来要多看看文档,多多了解sort的用法 在05-8-16,nicran <nicran at gmail.com> 写道: > > def mysort(a, b): > return cmp(a[1], b[1]) > > t1=((a1,b1),(a2,b2),(a3,b3)) > > l1 = list(t1) > > # 根据第二个元素排序 > print l1.sort(mysoft) > # 根据第一个元素排序 > print l1.sort() > > 在 05-8-16,watchsun<watchsun at gmail.com> 写道: > > 请问如何将二维的元组排序 > > 比如t1=((a1,b1),(a2,b2),(a3,b3),),a1,b1...可能是数字、英文字母或者中文等 > > 现要求根据第一个元素或者第二个元素按照某种规律(比如大小)排序,生成新的元组或者list > > 请问各位有什么好的办法? > > _______________________________________________ > > python-chinese list > > python-chinese at lists.python.cn > > http://python.cn/mailman/listinfo/python-chinese > > > > > > > > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050816/1e51eb2e/attachment.htm
2005年08月16日 星期二 13:21
flyaflya wrote: > 如果是2.4可以这样,速度快些: 既然是考虑到速度,下面我介绍一下在python中如何对sort进行速度优化。 > c.sort(key = lambda x:x[0]) 如果是对x[0]排序,就没有必要给key了,直接c.sort()就ok。 python内置的sort算法效率相当高。 > c.sort(key = lambda x:x[1]) 在需要考虑运行效率的情况下,用下面的方法比使用lambda效率更高: import operator c.sort(key=operator.itemgetter(1)) > 2.3版没有这个参数 在2.4以前版本的python中,可以使用Guido van Rossum建议的Schwartzian Transform来提高运行效率: def sortby(somelist, n): nlist = [(x[n], x) for x in somelist] nlist.sort() return [val for (key, val) in nlist] 或者sort in place: def sortby_inplace(somelist, n): somelist[:] = [(x[n], x) for x in somelist] somelist.sort() somelist[:] = [val for (key, val) in somelist] return 因此在需要考虑运行效率的情况下(注意限定条件!在正常的情况下,以代码可读 性为最优先),对于OP的问题 > 请问如何将二维的元组排序 > 比如t1=((a1,b1),(a2,b2),(a3,b3),),a1,b1...可能是数字、英文字母或者中文等 > 现要求根据第一个元素或者第二个元素按照某种规律(比如大小)排序,生成新的元组或者list 1. 在python 2.4以前版本中: 1) 如果是对a1, a2... 排序: list1 = list(t1) list1.sort() return list1 2) 如果是对b1, b2... 排序: return sortby(t1, 1) 2. 在python 2.4+版本中: 1) 如果是对a1, a2... 排序: return sorted(t1) 2) 如果是对b1, b2... 排序: import operator return sorted(t1, key=operator.itemgetter(1)) 更多关于python性能优化的技巧,可以看wiki.python.org上的一篇文章: http://wiki.python.org/moin/PythonSpeed/PerformanceTips -- Qiangning Hong I'm usually annoyed by IDEs because, for instance, they don't use VIM as an editor. Since I'm hooked to that, all IDEs I've used so far have failed to impress me. -- Sybren Stuvel @ c.l.python Get Firefox! <http://www.spreadfirefox.com/?q=affiliates&id=67907&t=1>
Zeuux © 2025
京ICP备05028076号