Skip to content

Instantly share code, notes, and snippets.

@luizomf
Last active October 29, 2022 15:02
Show Gist options
  • Save luizomf/3e94d9ca785ab77cb58f3697b6d7c0b8 to your computer and use it in GitHub Desktop.
Save luizomf/3e94d9ca785ab77cb58f3697b6d7c0b8 to your computer and use it in GitHub Desktop.
"""
-> É uma lista de listas de números inteiros
-> As listas internas tem o tamanho de 10 elementos
-> As listas internas contém números entre 1 a 10 e eles podem ser duplicados
Exercício
-> Crie uma função que encontra o primeiro duplicado considerando o segundo
número como a duplicação. Retorne a duplicação considerada.
Requisitos:
A ordem do número duplicado é considerada a partir da segunda
ocorrência do número, ou seja, o número duplicado em si.
Exemplo:
[1, 2, 3, ->3<-, 2, 1] -> 1, 2 e 3 são duplicados (retorne 3)
[1, 2, 3, 4, 5, 6] -> Retorne -1 (não tem duplicados)
Se não encontrar duplicados na lista, retorne -1
"""
lista_de_listas_de_inteiros = [
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[9, 1, 8, 9, 9, 7, 2, 1, 6, 8],
[1, 3, 2, 2, 8, 6, 5, 9, 6, 7],
[3, 8, 2, 8, 6, 7, 7, 3, 1, 9],
[4, 8, 8, 8, 5, 1, 10, 3, 1, 7],
[1, 3, 7, 2, 2, 1, 5, 1, 9, 9],
[10, 2, 2, 1, 3, 5, 10, 5, 10, 1],
[1, 6, 1, 5, 1, 1, 1, 4, 7, 3],
[1, 3, 7, 1, 10, 5, 9, 2, 5, 7],
[4, 7, 6, 5, 2, 9, 2, 1, 2, 1],
[5, 3, 1, 8, 5, 7, 1, 8, 8, 7],
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1],
]
def encontra_primeiro_duplicado(param_lista_de_inteiros):
numeros_checados = set()
primeiro_duplicado = -1
for numero in param_lista_de_inteiros:
if numero in numeros_checados:
primeiro_duplicado = numero
break
numeros_checados.add(numero)
return primeiro_duplicado
for lista_de_inteiros in lista_de_listas_de_inteiros:
print(lista_de_inteiros, encontra_primeiro_duplicado(lista_de_inteiros))
"""
Os resultados devem ser:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] -1
[9, 1, 8, 9, 9, 7, 2, 1, 6, 8] 9
[1, 3, 2, 2, 8, 6, 5, 9, 6, 7] 2
[3, 8, 2, 8, 6, 7, 7, 3, 1, 9] 8
[4, 8, 8, 8, 5, 1, 10, 3, 1, 7] 8
[1, 3, 7, 2, 2, 1, 5, 1, 9, 9] 2
[10, 2, 2, 1, 3, 5, 10, 5, 10, 1] 2
[1, 6, 1, 5, 1, 1, 1, 4, 7, 3] 1
[1, 3, 7, 1, 10, 5, 9, 2, 5, 7] 1
[4, 7, 6, 5, 2, 9, 2, 1, 2, 1] 2
[5, 3, 1, 8, 5, 7, 1, 8, 8, 7] 5
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1] -1
"""
@flavinhosls
Copy link

Eu fiz diferente do que foi pedido, ficou bem maior, eu queria usar algumas coisas, como cores, que era algo que eu já estava começando a esquecer.
Mas tem algumas "gambiarras" que vou melhorar.

lista = [
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    [9, 2, 8, 3, 4, 7, 9, 1, 8, 4],
    [4, 1, 1, 6, 9, 0, 3, 4, 2, 5],
    [5, 4, 6, 2, 2, 8, 4, 9, 4, 8],
    [7, 8, 6, 4, 0, 8, 1, 2, 3, 5],
    [8, 9, 5, 0, 3, 1, 1, 4, 6, 8]
]
a = 'Os elementos repetidos estão em vermelho.'
print('=-' * len(a))
print(a.center(80))
print('=-' * len(a))
existe = []
def sublistas(listaq):
    existe.clear()
    for v, elemento in enumerate(listaq):
        if len(existe) == 0:
            print('[', end='')
            existe.append(8676643433145569869)
        if elemento in existe:
            if v != 9:
                print(f'\033[31m{elemento}\033[m', end=',')
            else:
                print(f'\033[31m{elemento}\033[m', end='')
        else:
            if len(existe) > 0:
                existe.append(elemento)
                if v != 9:
                    print(f'\033[34m{elemento}\033[m', end=',')
                else:
                    print(f'\033[34m{elemento}\033[m', end='')
        if v == 9:
            print(']')

for s in range(len(lista)):
    sublistas(lista[s])

`

@fcoprata
Copy link

fcoprata commented Aug 27, 2022

Olá professor

def find_duplicate(lista):
    for i in lista:
        i = set(i)
        if len(i) != 10: 
            print(f"na lista {i} tem {10-len(i)} números repetidos")
        else:
            print(f"na linha {i} não tem itens repetidos")

find_duplicate(lista_de_listas_de_inteiros)

eu realizei meu código dessa maneira

@NetoSilvino
Copy link

NetoSilvino commented Sep 8, 2022

A minha ficou dessa maneira aqui, muito louco ver que tem muito jeito de chegar em um resultado, muito bom!!!
Lembrando que no meu resultado, apenas mostra a resposta sem a lista do lado como o professor fez, mas ao menos eu cheguei no resultado. kkkkk

def numero_repetidos_em_listas_sublistas(lista):
    para_return = []
    for numero_da_sublista, index_de_lista in enumerate(lista):
        sublista = index_de_lista

        for index_sublista, valor_sublista in enumerate(sublista):
            if index_sublista <= 8:
                if sublista[index_sublista] == sublista[index_sublista + 1]:
                    para_return += f'{sublista[index_sublista]}'
                    break
            else:
                para_return += ([-1])
    return (para_return)

verificar_lista = numero_repetidos_em_listas_sublistas(lista_de_listas_de_inteiros)
print(verificar_lista)

@BrGarcia
Copy link

Minha Solução =>
Sei q esta um pouco mais complexo doque precisaria, mas eu tbm fiz umas alteracaoes tipo acrescentando um gerador aleatorio de listas raondomicas...


import random as rd

def gerador_lista(qtd:int, tamanho:int)->list:
    """Gera uma lista de numeros randomicas com uma quantidade QTD com TAMANHO elementos"""
    lista_local = []
    listatemp = []
    for _ in range(0, qtd):
        for _ in range(0, tamanho):
            listatemp.append(rd.randint(0, 9))
        lista_local.append(listatemp)
        listatemp = []
    return lista_local

def busca_repetido(lista: list)->list:
    """"Recebe uma lista, busca o primeiro elemento repetido
    e retorna uma lista (a,b) onde a é o elemento repetido e 
    b é a posicao na lista do elemento repetido."""
    lista_repetidos = [-1]
    d_temp = -1
    for index,valor in enumerate(lista):
        for i,v in enumerate(lista):
            d = len(lista)-i
            if (i != index) and (valor == v) and (i>index) and d>d_temp:
                d_temp = d
                lista_repetidos.clear()
                lista_repetidos.append([i,v])
    return lista_repetidos


lista_main = gerador_lista(500,8) #gera 500 listas de 8 elementos

for i in lista_main:
    lista_busca = busca_repetido(i)
    print(i, lista_busca)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment