Le Liste e i cicli Maledetti!

di il
7 risposte

Le Liste e i cicli Maledetti!

Buongiorno a tutti,
premetto che sono nuovo qui, ma già so che mi aiuterete
Mi sto cimentando ad imparare Python, però ho un problema che non so come risolvere, magari è una stupidaggine.
Date due liste:
lista1 = [0, 2, ,3 ,4]
lista2 = [3, 4, 5, 8]
come faccio a produrre un ciclo che prende il primo elemento della lista1 ed esegue una divisione con il primo elemento della lista2, poi passa al secondo elemento della lista1 ed esegue una divisione con il secondo elemento della lista2, e così via...fino alla fine della lista1 e lista2 (cha hanno stesso numero di elementi). Il risultato finale deve essere una nuova lista, chiamiamola lista3, in cui si sono tutti i risultati delle divisioni.
lista3 = [ lista1[0]/lista2[0], lista1[1]/lista1[1],...]

7 Risposte

  • Re: Le Liste e i cicli Maledetti!

    Scomettiamo che NON HAI LETTO nemmeno un manuale di introduzione alla programmazione, o un manualetto introduttivo su Python?

    Queste cose le trovi a pagina 2 di QUALUNQUE MANUALE.
    A pagina 1 c'e' la presentazione dell'autore!

    SPENDI SOLDI in libri invece che in birra/donne/sigarette!!!

    E STUDIA!

  • Re: Le Liste e i cicli Maledetti!

    Ciao migliorabile,
    Ho cominciato 2 settimane fa a studiare python ed ho iniziato con un semplice libro pdf trovato su internet. Hai ragione non ho molta dimestichezza, specialmente con i cicli, non riesco proprio a capire come scriverli. Ti assicuro che sto provando e leggere e rileggere quel manualetto che ho, ma non riesco proprio a capire. Non ho nemmeno mai scritto in un forum e non pensavo che ci fosse questa aggressività per i principianti, anche perché non conosci la mia storia e non sai se ho speso già dei soldi per imparare.
    Ti ringrazio comunque per la tua risposta partecipativa, ma non hai creato alcun valore aggiunto.
    Good luck my friend
  • Re: Le Liste e i cicli Maledetti!

    Metodo 1:
    lista3=[]
    for i in range(len(lista1)):
    	lista3.append(lista1[i]/lista2[i])
    Metodo 2:
    lista3=[]
    for l1 in lista1:
    	lista3.append(l1/lista2[lista1.index(l1)])
    Metodo 3:
    lista3 = [l1/lista2[lista1.index(l1)] for l1 in lista1]
    Metodo 4:
    lista3=[]
    for l1, l2 in zip(lista1, lista2):
    	lista3.append(l1/l2)
    Metodo 5:
    lista3=[l1/l2 for l1,l2 in zip(lista1,lista2)]
    Finale:
    lista3=[l1/l2 for l1,l2 in zip(lista1,lista2) if l2 > 0]
    Nel metodo 1 si fa uso della funzione range, che genera len(lista1) valori partendo da 0 (quindi tra 0 e 3). Siccome le liste sono uguali, l'indice numerico è identico per entrambe.
    Nel metodo 2 si applica l'iterazione direttamente sulla lista 'lista1'.
    Nel metodo 3 si usa la 'pythonic way': la list comprehension.
    Nel metodo 4 si usa la funzione 'zip', che crea un iteratore che aggrega gli iteratori passati come argomento.
    Il motodo 5 è la combinazione dei metodi 3 e 4. Nel metodo finale si evitano errori di divisione per 0.
  • Re: Le Liste e i cicli Maledetti!

    Grazie Andrea, penso di amarti <3. Quella (forse) più vicina alle mie conoscenze è il primo codice che hai scritto.
    Il codice non funzionante che avevo scritto io era con while:
    i=0
    lista3 = [0, 0, 0, 0]
    while i<=len(lista1):
    lista3 = lista1(i)/lista2(i)
    print(lista3)
    i+=1
  • Re: Le Liste e i cicli Maledetti!

    Per inserire del codice, mettilo tra due tag 'code', altrimenti non si capisce se sbagli tu o phpBB.
    Nella fattispecie:
    lista1=[0,2,3,4]
    lista2=[3,4,5,8]
    lista3=[0,0,0,0]
    i=0
    while i<=len(lista1):
    	lista3 = lista1(i)/lista2(i)
    	print(lista3)
    	i+=1
    non funziona perchè:
    • le liste iniziano dall'indice 0, quindi il while fa un giro in più e l'ultimo giro finisce in un 'IndexError: list index out of range'
    • non puoi assegnare un singolo valore ad una lista senza indicare l'indice od usare il metodo append()
    • gli indici di lista si mettono tra parentesi quadre
    Questo funzionerebbe:
    lista1=[0,2,3,4]
    lista2=[3,4,5,8]
    lista3=[0,0,0,0]
    i=0
    while i < len(lista1):
    	lista3[i] = lista1[i]/lista2[i]
    	i+=1
    print(lista3)
    ma sarebbe più corretto:
    lista1=[0,2,3,4]
    lista2=[3,4,5,8]
    lista3=[]
    i=0
    while i < len(lista1):
    	lista3.append(lista1[i]/lista2[i])
    	i+=1
    print(lista3)
  • Re: Le Liste e i cicli Maledetti!

    A ok ho capito, infatti mi dava IndexError. Comunque vedo che utilizzi molto la lista vuota, piuttosto che la lista con gli zero, per cui lascerò questa tecnica e non utilizzerò il while, meglio il for.
    PS. si scusami gli indici vanno in parentesi quadre, ho scritto male io.
    Grazie ancora Andrea
  • Re: Le Liste e i cicli Maledetti!

    Utilizzare una lista predimensionata in Python non ha granché senso. Basta che la variabile che la identifica sia di tipo 'list'. Se usi una lista predimensionata, alla prima necessità di aumentare o diminuire il numero di elementi ti tocca mettere mano al codice. Nel caso della lista vuota, il metodo 'append' (e la sua controparte 'pop') continuerà a funzionare fino a quando il gestore della memoria glielo lascerà fare.
Devi accedere o registrarti per scrivere nel forum
7 risposte