基于元组中的值对列表进行分区 - Python

问题描述:

在Python中对元组列表进行分区的最佳方式是什么?基于元组中的值对列表进行分区 - Python

目前我有一个元组的排序列表,由第二个元素(一个值),我想找到所有在开始时以有效的方式重复的值。

说:

[ ("tearing", 3), ("me", 3), ("apart", 3), ("lisa", 3), 
    ("denny", 0), ("mark",0) ] 

通过函数运行它将返回

[("tearing", 3), ("me", 3), ("apart", 3), ("lisa", 3)]. 

但我不知道如何去这个问题。

+0

我不知道那部电影,我想表达我最深切的感谢,对这些元组进行编码。我不记得曾经如此热烈地笑过,我甚至没有夸张。所以真的有它的用途... – 2011-03-14 10:30:27

import itertools 
import operator 

L = [("tearing", 3), ("me", 3), ("apart", 3), ("lisa", 3), ("denny", 0), ("mark",0)] 

print list(itertools.groupby(L, operator.itemgetter(1)).next()[1]) 

# [('tearing', 3), ('me', 3), ('apart', 3), ('lisa', 3)] 

但是真的,没有必要提醒我那部电影。

+0

非常感谢你,抱歉,如果我把这一举动带回来,毁了你的生活。除了pythondocs之外,你还有什么建议阅读更多高级方法吗? – James 2011-03-14 07:00:00

+1

Hrm。不是真的。我通过阅读文档或咨询比我有经验的人更多的东西。 – 2011-03-14 07:03:17

到@Ignacio巴斯克斯 - 艾布拉姆斯答案的替代,使用列表理解:

>>> data=[ ("tearing", 3), ("me", 3), ("apart", 3), ("lisa", 3), ("denny", 0), ("mark",0) ] 
>>> print [x for x in data if x[-1]== data[0][-1]] 
[('tearing', 3), ('me', 3), ('apart', 3), ('lisa', 3)] 

from itertools import takewhile 

L = [("tearing", 3), ("me", 3), ("apart", 3), ("lisa", 3), ("denny", 0), ("mark",0)] 
first = L[0][1] 

print list(takewhile(lambda x : x[1] == first, L)) 

有点变形伊格纳西奥的