首页 > 解决方案 > 如何返回由 Python 列表中的连续数字组成的最长子序列?

问题描述

我能够计算由列表中连续数字形成的最长升序子序列的长度,或任何子序列的最大和。但是,我有点难以打印出具有连续数字的最长子序列(例如:8、9、10、11、12)。我怎样才能做到这一点?每次在 new_list 中检查 num 值时,我是否应该创建一个空列表并覆盖这些值?

提前致谢, lanuit72


    def longest_largest_seq(list):
       
        list = [5,6,3,8,3,4,9,8,10,12,11,99,98]
    
        largest = 0
        sum = 0
        new_list = set(list) #using set to get unique value from the list
        max_count = 0
        count = 0
    
        for num in list:
            if num - 1 not in new_list:
                sum = 0
                count = 0
                while num in new_list:
                    sum += num
                    count += 1
                    num += 1
    
                    if sum > largest:
                        largest = sum
                    if count > max_count:
                        max_count = count
        return largest, max_count
    
    print(f'Largest consecutive sum and longest consecutive subsequence', longest_largest_seq(list))

 

标签: python

解决方案


像这样的东西?

from more_itertools import consecutive_groups

a_list = [5,6,3,8,3,4,9,8,10,12,11,99,98]
sorted_list = sorted(a_list)

grouped = [list(i) for i in consecutive_groups(sorted_list)]

for i in grouped:
    print(i)

print('\n', max(grouped, key=len), sep='')
[3]
[3, 4, 5, 6]
[8]
[8, 9, 10, 11, 12]
[98, 99]

[8, 9, 10, 11, 12]

推荐阅读