[Python] Analisar conjunto numérico buscando números sequenciais

Discussão em 'Python' iniciado por Stack, Novembro 1, 2024.

  1. Stack

    Stack Membro Participativo

    Tenho, pequena parte, dos dados abaixo, sequência de números:

    a = [(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15),(6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 19, 20, 23, 24, 25),(1, 2, 3, 4, 10, 11, 12, 13, 14, 16, 17, 20, 22, 24, 25),(3, 4, 7, 8, 9, 10, 13, 14, 15, 16, 18, 19, 20, 22, 24)]
    , 17, 20, 22, 24, 25],[3, 4, 7, 8, 9, 10, 13, 14, 15, 16, 18, 19, 20, 22, 24]]


    Cheguei na análise abaixo:

    sequencia = [(15,), (10, 2, 3), (4, 5, 2, 1, 1, 2), (2, 4, 4, 3, 1, 1)]
    seqMax = [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
    [6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
    [10, 11, 12, 13, 14],
    [7, 8, 9, 10]]


    Ou seja:


    • Primeira lista de números: (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), possui 15 números sequenciais: (15,) e a maior sequência encontrada é ela mesma;


    • Segunda lista de números: (6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 19, 20, 23, 24, 25), possui 3 sequências: (10, 2, 3) onde 10 = 6, 7, 8, 9, 10, 11, 12, 13, 14, 15; 2 = 19, 20 e 3 = 23, 24, 25; e a maior sequência é a de 10: 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.

    Montei uma função, código completo abaixo, mas gostaria de validar com você se existe uma forma mais fácil de codificar:

    import pandas as pd
    a = [(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15),(6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 19, 20, 23, 24, 25),(1, 2, 3, 4, 10, 11, 12, 13, 14, 16, 17, 20, 22, 24, 25),(3, 4, 7, 8, 9, 10, 13, 14, 15, 16, 18, 19, 20, 22, 24)]
    def sequencia_linha(x):
    a = list(x)
    ab = []
    sequencia=[]
    seqMaxInterno=[]
    for n in a:
    if len(ab)>0:
    if max(ab)+1 == n:
    ab.append(n)
    cont+=1
    else:
    if len(ab) > len(seqMaxInterno):
    seqMaxInterno=ab
    sequencia.append(cont)
    ab=[]
    ab.append(n)
    cont=1
    else:
    ab.append(n)
    cont=1
    if len(ab) > len(seqMaxInterno):
    seqMaxInterno=ab
    sequencia.append(cont)
    seqMax.append(seqMaxInterno)
    return tuple(sequencia)

    seqMax=[]
    sequencia=[]
    for x in a:
    sequencia.append(sequencia_linha(x))

    Continue reading...

Compartilhe esta Página