es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

comprensión de lista sino nada python

Estoy tratando de usar la comprehensión de listas para añadir nombres que no están en la lista, y no sé cómo usar algo como else pass.

list_test = []
names = ['Gabriel', 'Lucas', 'Pedro', 'Gabriel', 'Fernando'] # Para ver los 'Elipsis' sólo aumente esta lista

Sé que si uso un loop 'for ...' se puede resolver este problema, pero el código original funciona así y no puedo cambiarlo (esta parte es sólo un pequeño fragmento).

count = 0
while True:
    if count == len(names): # se rompe cuando se han leído todos los nombres
        break

    name = names[count] # Sólo seleccionar cada nombre

    list_test.append(name if name not in list_test else '') # no sé qué poner en else para pasar

    count += 1

print(list_test)

He intentado con else ..., pero en el código original se agrega Ellipsis a la lista, en este código a veces funciona, pero necesito una mejor solución.

Quiero que la salida sea como: ['Gabriel', 'Lucas', 'Pedro', 'Fernando'].

¿Alguien me puede ayudar? ;-(

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para agregar un nombre a la lista solo si aún no está presente, y omitirlo en caso contrario, puede utilizarse la cláusula “else” del operador ternario para retornar una tupla vacía, lo que no modificará la lista:

    list_test.append(name) if name not in list_test else ()
    

    Esto agregará el nombre a la lista si aún no está presente y no hará nada en caso contrario. La tupla vacía es necesaria porque el operador ternario necesita tener algo que retornar tanto en los casos del “if” como del “else”, y si simplemente se utiliza “pass” (que no hace nada), no retornará nada, y el resultado será una lista con valores “None” en lugar de los nombres esperados. La tupla vacía es un valor simple e inofensivo que no afectará la lista, pero permitirá al operador ternario retornar un valor.

    Entonces, el código completo sería:

    list_test = []
    names = ['Gabriel', 'Lucas', 'Pedro', 'Gabriel', 'Fernando']
    
    count = 0
    while True:
        if count == len(names):
            break
    
        name = names[count]
    
        list_test.append(name) if name not in list_test else ()
    
        count += 1
    
    print(list_test)
    

    Y la salida será:

    ['Gabriel', 'Lucas', 'Pedro', 'Fernando']
    

    Téngase en cuenta que existen otras maneras de lograr el mismo resultado, como utilizar un bucle “for” en lugar de un ciclo “while”, o utilizar la función integrada “set()” para eliminar duplicados de la lista, pero la solución anterior es un reemplazo directo del código original, utilizando comprensión de listas.

Comments are closed.