簡體   English   中英

如何返回 Python 列表中連續數字形成的最長子序列?

[英]How to return the longest subsequence formed by consecutive numbers in a Python list?

我能夠計算由列表中連續數字形成的最長升序子序列的長度,或任何子序列的最大總和。 但是,我有點難以打印出具有連續數字的最長子序列(例如: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))

 

像這樣的東西?

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]

我想這就是你想要的?

import copy

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

sub_seq1 = []
sub_seq2 = []

for index, num in enumerate(seq):
    if index < len(seq) - 1:
        if num + 1 == seq[index + 1]:
            sub_seq2.append(num)
        else:
            sub_seq2.append(num)

            if len(sub_seq2) > len(sub_seq1):
                sub_seq1 = copy.deepcopy(sub_seq2)

            sub_seq2.clear()


print(sub_seq1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM