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.

Python: Intersectar 2 listas de músicos excluyendo las calificaciones de la lista con herramientas básicas.

Tratando de hacer una intersección entre 2 listas de músicos con su valoración específica en cada lista. Quiero encontrar similitudes: qué músicos están en ambas listas, pero para hacer esto tengo que excluir la valoración. Primero intenté escribir el código para encontrar los mismos músicos para las listas sin valoración, pero obtuve una salida vacía []. Tal vez alguien pueda editar el código y escribir cómo excluir la valoración de la lista.

grupos_musicales_Rock = [
    ["Ad", "Rock", "1"],
    ["John", "Lennon", "2"],
    ["Rivers", "Cuomo", "3"],
    ["Patrick", "Wilson", "4"],
]

grupos_musicales_Folk = [
    ["John", "Lennon", "1"],
    ["Ad", "Rock", "2"],
    ["Axl", "Rose", "3"],
    ["Jam", "Master", "Jay", "4"],
]

def intersect(lista_de_nombres_1, lista_de_nombres_2):
    lista_1 = [" ".join(line) for line in lista_de_nombres_1]
    lista_2 = [" ".join(line) for line in lista_de_nombres_2]
    lista_3 = [valor for valor in lista_1 if valor in lista_2]
    return lista_3

salida = intersect(grupos_musicales_Rock, grupos_musicales_Folk)
print(salida[0:3])

Estaba pensando en convertir las listas en cadenas y luego comparar estas cadenas.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para excluir la calificación de la lista, puede modificar la función intersect comparando sólo los dos primeros elementos de cada sublista. Esto se puede hacer cambiando la línea list1 = [" ".join(line) for line in list_of_names1] por list1 = [" ".join(line[:2]) for line in list_of_names1] y de forma similar para list2. Esto sólo unirá los dos primeros elementos (los nombres de los músicos) con un espacio, excluyendo la calificación.

    Aquí está el código modificado:

    musical_groups_Rock = [
        ["Ad", "Rock", "1"],
        ["John", "Lennon", "2"],
        ["Rivers", "Cuomo", "3"],
        ["Patrick", "Wilson", "4"],
    ]
    
    musical_groups_Folk = [
        ["John", "Lennon", "1"],
        ["Ad", "Rock", "2"],
        ["Axl", "Rose", "3"],
        ["Jam", "Master", "Jay", "4"],
    ]
    
    def intersect(list_of_names1, list_of_names2):
        list1 = [" ".join(line[:2]) for line in list_of_names1] # sólo une los dos primeros elementos
        list2 = [" ".join(line[:2]) for line in list_of_names2]   
        list3 = [value for value in list1 if value in list2]
        return list3
    
    output = intersect(musical_groups_Rock, musical_groups_Folk)
    print(output[0:3])
    

    El resultado ahora debería ser ['Ad Rock', 'John Lennon'], que son los músicos que aparecen en ambas listas.

Comments are closed.