【问题标题】:print the longest sequence of number in number list (python)打印数字列表中最长的数字序列(python)
【发布时间】:2011-03-21 12:53:32
【问题描述】:

我有一个号码列表:

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 中做到这一点? 谢谢你帮助我,

【问题讨论】:

    标签: python-3.x


    【解决方案1】:

    你可以使用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]
    

    【讨论】:

    • 这就是为什么python很棒!许多复杂的事情可以用一两行代码完成。
    • @jammon:如果你添加 cmets。因为上面的代码几乎难以理解。 :)
    • @Lennart:你说得对,这个版本好多了,好多了。我只是在思考这个问题的解决方案,并且想到了 ifs 和 fors 以​​及大约 5 到 10 行。然后我发现了这个答案(并在文档中查找了 itertools.groupby),并且再次对 pythonic 解决方案的简洁性感到困惑。
    • 现在添加了 cmets,代码更易于理解。 :)
    • @Lennart:我认为代码更具可读性的主要原因是我重新格式化了它并为变量赋予了有意义的名称。无论如何感谢 cmets!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    相关资源
    最近更新 更多