首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用分词器对元组进行分类困难

用分词器对元组进行分类困难
EN

Stack Overflow用户
提问于 2013-08-16 18:42:44
回答 1查看 1.3K关注 0票数 2

正如屏幕名称所证明的那样,我是Python的新手。我试图对一个元组列表进行排序,在列表中考虑(x,y)对,然后遇到了一个问题。我的目标是首先按照x变量的升序排序元组列表,然后排序。

我在HowToSort上研究了http://wiki.python.org/moin/HowTo/Sorting/上的wiki,并想尝试使用操作符模块和itemgetter函数作为关键。

简单的排序()函数可以很好地对元组进行排序,但是当您想要一个索引升序和一个升序时,我就迷路了。以下是代码:

代码语言:javascript
复制
from operator import itemgetter, attrgetter

ItemList = [(1,7),(2,1),(1,5),(1,1)]
# Want list sorted with X values descending, then y values ascending
# expected [(2, 1), (1, 1), (1,5), (1, 7)]

print
print '  Input:', ItemList
print 'Output1:',sorted(ItemList, reverse = True)
print 

print '  Input:', ItemList
print 'Output2:', sorted(ItemList, key = itemgetter(-0,1))
print
print ' WANTED:', '[(2, 1), (1, 1), (1,5), (1, 7)]'

具有以下输出:

代码语言:javascript
复制
  Input: [(1, 7), (2, 1), (1, 5), (1, 1)]
Output1: [(2, 1), (1, 7), (1, 5), (1, 1)]

  Input: [(1, 7), (2, 1), (1, 5), (1, 1)]
Output2: [(1, 1), (1, 5), (1, 7), (2, 1)]

 WANTED: [(2, 1), (1, 1), (1, 5), (1, 7)]

显然,我不理解项目的功能,因此,如果有任何帮助,将不胜感激。

另外,对于如何在(x,y)对上进行这两种排序,有什么想法吗?我希望避免使用lambda解决方案,但我确信这就是它的发展方向。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-16 18:45:50

-00是一样的。更重要的是,负指数与itemgetter()有不同的含义;它并不意味着值被否定。

使用lambda代替:

代码语言:javascript
复制
sorted(ItemList, key=lambda item: (-item[0], item[1]))

演示:

代码语言:javascript
复制
>>> ItemList = [(1,7),(2,1),(1,5),(1,1)]
>>> sorted(ItemList, key=lambda item: (-item[0], item[1]))
[(2, 1), (1, 1), (1, 5), (1, 7)]

负索引从序列的末尾取项:

代码语言:javascript
复制
>>> end = itemgetter(-1)
>>> end([1, 2, 3])
3

itemgetter()永远不会修改检索到的项,当然也不会否定它。

请注意,itemgetter()只是一种方便的方法,您不必使用它,对于更复杂的排序顺序,使用自定义函数或lambda是更好的选择。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18280087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档