Confrontare due liste

di il
8 risposte

Confrontare due liste

Buonasera a tutti

premetto che ho da poco iniziato a programmare con python e come da titolo non so come comportarmi quando devo fare il confronto tra due liste.

per esempio ho una funzione, che ha come argomenti due liste di lunghezza uguale ----> funzione1(lista1,lista2)

lista1 = ['1','2','3']

lista2 = ['2','4','1']

come faccio a mettere in relazione gli elementi delle due liste che occupano la stessa posizione?

8 Risposte

  • Re: Confrontare due liste

    Div ha scritto:


    non so come comportarmi quando devo fare il confronto tra due liste.
    Se vuoi solamente sapere se sono "uguali" (stesso contenuto nello stesso ordine), allora basta lista1 == lista2

    Div ha scritto:


    come faccio a mettere in relazione gli elementi delle due liste che occupano la stessa posizione?
    Se vuoi accedere agli elementi di ciascuna lista in "parallelo" (per fare quello che vuoi):

    a)
    for i in range(len(lista1)):
        print(lista1[i], lista2[i])
    Ma è poco bello, potenzialmente meno efficiente e non "pythonic".


    b)
    for e1,e2 in zip(lista1, lista2):
        print(e1, e2)
    Più bello e "pythonic"
  • Re: Confrontare due liste

    Il piano sarebbe di mettere in relazione gli elementi nella stessa posizione e levare dalla lista il valore maggiore tra i due, se invece i due hanno valore uguale andrebbero levati tutti e due

    lista1 = ['cat'','dog']
    lista2 = ['snake','cat']

    output:
    lista1 = ['cat']
    lista2 = ['cat']

    dovrò fare così?
    def modi(lista1,lista2):
    for e1,e2 in zip(lista1, lista2):
    if e1 > e2:
    lista1.remove(e1)
    elif e2 > e1:
    lista2.remove(e2)
    else:
    lista1.remove(e1)
    lista2.remove(e2)
    return lista1
    return lista2
  • Re: Confrontare due liste

    Div ha scritto:


    dovrò fare così?
    NO. In generale non va bene rimuovere direttamente dalla lista su cui si sta iterando. Potresti creare due nuove liste e poi alla fine i loro contenuti li riassegni alle liste originali, attenzione, non con assegnazione diretta dei reference ma usando [:]
  • Re: Confrontare due liste

    Ma poi non dovrei riuscire a levare il valore, non sarebbe più comodo utilizzare il remove? Oppure c'è qualcosa che mi sfugge?
  • Re: Confrontare due liste

    Div ha scritto:


    ma poi non dovrei riuscire a levare il valore, non sarebbe più comodo utilizzare il remove? Oppure c'è qualcosa che mi sfugge?
    Non puoi/non devi rimuovere da una lista su cui si sta iterando. Questo vale in generale.
    Semplicemente crea due nuove liste, ragiona al contrario (invece di scartare il maggiore, inserisci il minore) e alla fine di tutto, assegni il contenuto (non il reference) nelle liste originali.
  • Re: Confrontare due liste

    Okok credo di aver capito, grazie per la dritta amico
  • Re: Confrontare due liste

    Puoi anche fare una cosa furba: la funzione può restituire una tupla con le due nuove liste e poi il chiamante avrà la facoltà di:

    a) assegnarle a variabili differenti:
    listaX, listaY = modi(listaA, listaB)

    b) assegnarle alle stesse variabili passate alla funzione:
    listaA, listaB = modi(listaA, listaB)
  • Re: Confrontare due liste

    Qui però stiamo andando per cose troppo complicate ahah
Devi accedere o registrarti per scrivere nel forum
8 risposte