2011-03-21 66 views

回答

3

您可以使用itertools.groupby()

from itertools import groupby 

a = [2, 3, 4, 5, 1, 3, 2, 4, 5, 6, 2, 6, 7, 5, 2, 7, 5, 6, 2] 

# get the subsequences not containing 2 
subsequences = (list(it) 
       for contains_two, it in groupby(a, lambda x: x == 2) 
       if not contains_two) 

# find the longest one among them 
print(max(subsequences, key=len)) 

打印

[3, 4, 5, 1, 3] 
+0

这就是为什么蟒蛇是伟大的!许多复杂的事情可以在一行或两行中完成。 – jammon 2011-03-21 13:13:15

+0

@jammon:如果你添加评论。因为上面的代码几乎是不可理解的。 :) – 2011-03-21 13:41:58

+0

@Lennart:你说得对,这个版本好多了,好多了。我只是在思考一个问题的解决方案,并且对“if”和“for”以及5到10行进行了解。然后我发现了这个答案(并且在文档中查找了itertools.groupby),并且更加困惑于pythonic解决方案的简洁性。 – jammon 2011-03-21 18:26:54