1
我有号码的清单:打印张数最长的序列号列表(蟒蛇)
a=[2,3,4,5,1,3,2,4,5,6,2,6,7,5,2,7,5,6,2]
我想不是包含2最长的序列,所以答案是:
[3,4,5,1,3]
如何在python中做到这一点? 感谢您帮助我,
我有号码的清单:打印张数最长的序列号列表(蟒蛇)
a=[2,3,4,5,1,3,2,4,5,6,2,6,7,5,2,7,5,6,2]
我想不是包含2最长的序列,所以答案是:
[3,4,5,1,3]
如何在python中做到这一点? 感谢您帮助我,
您可以使用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]
这就是为什么蟒蛇是伟大的!许多复杂的事情可以在一行或两行中完成。 – jammon 2011-03-21 13:13:15
@jammon:如果你添加评论。因为上面的代码几乎是不可理解的。 :) – 2011-03-21 13:41:58
@Lennart:你说得对,这个版本好多了,好多了。我只是在思考一个问题的解决方案,并且对“if”和“for”以及5到10行进行了解。然后我发现了这个答案(并且在文档中查找了itertools.groupby),并且更加困惑于pythonic解决方案的简洁性。 – jammon 2011-03-21 18:26:54