2011-03-14 81 views
0

在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

回答

4
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

0

到@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)] 
0
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)) 

有點變形伊格納西奧的

相關問題