Operazioni su liste con cicli while/for

di il
4 risposte

Operazioni su liste con cicli while/for

Salve da questa lista result  devo eliminare i valori in rosso, per farlo devo eliminare i valori la cui radice della soma delle componenti al quadrato differisce di max 1 da un altro elemento della lista (mantenendo il primo)   

[[1, 491], [21, 426], [21, 426], [52, 503], [74, 508], [114, 425], [114, 425], [144, 507], [160, 513], [201, 425], [201, 425], [233, 502], [248, 510], [292, 424], [292, 424], [331, 533], [400, 528], [400, 435], [400, 435], [401, 527], [401, 527], [401, 434], [401, 434], [401, 528], [401, 528], [402, 434], [402, 434], [403, 523], [403, 523], [403, 434], [403, 434], [404, 521], [404, 521], [404, 436], [404, 436], [405, 518], [405, 518], [406, 437], [406, 437], [451, 473], [451, 473], [492, 433], [492, 433], [493, 509], [493, 509], [493, 433], [493, 433], [494, 516], [494, 516], [494, 432], [494, 432], [495, 519], [495, 519], [496, 432], [496, 432], [497, 524], [497, 524], [497, 432], [497, 432], [498, 526], [571, 527], [605, 422], [605, 422], [641, 504], [663, 501], [698, 421], [698, 421], [727, 500], [748, 509], [786, 420], [786, 420], [832, 506], [850, 496], [880, 421], [880, 421], [916, 526], [988, 525], [988, 432], [988, 432], [989, 524], [989, 524], [989, 430], [989, 430], [989, 523], [989, 523], [990, 430], [990, 430], [990, 522], [990, 522], [991, 430], [991, 430], [991, 519], [991, 519], [992, 431], [992, 431], [992, 516], [992, 516], [993, 431], [993, 431], [994, 507], [994, 507], [995, 433], [995, 433], [1038, 470], [1038, 470], [1080, 430], [1080, 430], [1081, 501], [1081, 501], [1081, 430], [1081, 430], [1082, 510], [1082, 510], [1082, 430], [1082, 430], [1082, 511], [1082, 511], [1083, 430], [1083, 430], [1083, 514], [1083, 514], [1084, 428], [1084, 428], [1084, 517], [1084, 517], [1085, 427], [1085, 427], [1086, 520], [1086, 520], [1086, 427], [1086, 427], [1086, 522], [1086, 522], [1087, 427], [1087, 427], [1087, 524], [1087, 524], [1087, 428], [1087, 428], [1088, 525], [1159, 522], [1194, 417], [1194, 417], [1232, 501], [1250, 497], [1270, 451]]

questo è ciò che ho scritto ma richiede tempi biblici e non arriva al risultato, ma con il for non si aggiorna la lunghezza della lista che viene accorciata dall'eliminazione ed escono errori, grazie a chi si vuole prodigare ahah.Saluti

a = len(result)
while i in range(0,a-1):
   while j in range(i+1,a-1):
       if abs((result[i][0]**2+result[i][1]**2)**(1/2) - (result[j][0]**2+result[j][1]**2)**(1/2)) < 1:
           result.remove(result[j])
           a = len(result)
           j += 1
i += 1
print(result)

4 Risposte

  • Re: Operazioni su liste con cicli while/for

    Prova questo (il risultato non è identico a quello atteso, ma verifica se è necessario rivedere il metodo di calcolo):

    a = len(result)
    for i in range(0, a-1):
        for j in range(i+1,a-1):
            if abs((result[i][0]**2+result[i][1]**2)**(1/2) - (result[j][0]**2+result[j][1]**2)**(1/2)) < 1:
                result[j] = [0,0]
    
    end = False
    
    while not end:
        try:
            result.remove([0,0])
        except ValueError:
            end = True
    
    print(result)
  • Re: Operazioni su liste con cicli while/for

    Ciao Andrea Quaglia, rinnovo questo topic perchè facendo prove ho scoperto che con quel metodo della radice non si arriva al risultato che speravo. Ho pensato dunque questo con cui ottengo quasi il risultato, ma perdo quelli in giallo :(

    #rimuovo elementi uguali
    resultantList = []

    for element in result:
       if element not in resultantList:
           resultantList.append(element)

    print(resultantList)

    #rimuovo le quattro liste rumore
    for i in range(0, len(resultantList)-1):
       for j in range(i+1,len(resultantList)-1):
           if abs(resultantList[i][0] - resultantList[j][0]) < 10:
               resultantList[j] = [0,0]

    end = False

    while not end:
       try:
           resultantList.remove([0,0])
       except ValueError:
           end = True

    print(resultantList)

    [[1, 491], [21, 426], [52, 503], [74, 508], [114, 425], [144, 507], [160, 513], [201, 425], [233, 502], [248, 510], [292, 424], [331, 533], [400, 528], [451, 473], [492, 433], [571, 527], [605, 422], [641, 504], [663, 501], [698, 421], [727, 500], [748, 509], [786, 420], [832, 506], [850, 496], [880, 421], [916, 526], [988, 525], [1038, 470], [1080, 430], [1159, 522], [1194, 417], [1232, 501], [1250, 497], [1270, 451]]

    Sarebbe possibile oltre a rimuovere le quattro liste di rumore salvare gli elementi dentro lista_rum_1,lista_rum_2,lista_rum_3,lista_rum_4? Non saprei proprio come fare se è molto lungo accettto anche solo un idea :)

    In ResultantList le evidenzio per chiarezza

    [[1, 491], [21, 426], [52, 503], [74, 508], [114, 425], [144, 507], [160, 513], [201, 425], [233, 502], [248, 510], [292, 424], [331, 533], [400, 528], [400, 435], [401, 527], [401, 434], [401, 528], [402, 434], [403, 523], [403, 434], [404, 521], [404, 436], [405, 518], [406, 437], [451, 473], [492, 433], [493, 509], [493, 433], [494, 516], [494, 432], [495, 519], [496, 432], [497, 524], [497, 432], [498, 526], [571, 527], [605, 422], [641, 504], [663, 501], [698, 421], [727, 500], [748, 509], [786, 420], [832, 506], [850, 496], [880, 421], [916, 526], [988, 525], [988, 432], [989, 524], [989, 430], [989, 523], [990, 430], [990, 522], [991, 430], [991, 519], [992, 431], [992, 516], [993, 431], [994, 507], [995, 433], [1038, 470], [1080, 430], [1081, 501], [1081, 430], [1082, 510], [1082, 430], [1082, 511], [1083, 430], [1083, 514], [1084, 428], [1084, 517], [1085, 427], [1086, 520], [1086, 427], [1086, 522], [1087, 427], [1087, 524], [1087, 428], [1088, 525], [1159, 522], [1194, 417], [1232, 501], [1250, 497], [1270, 451]]

  • Re: Operazioni su liste con cicli while/for

    Sei tu che devi trovare il metodo giusto per eliminare i valori che non ti servono. Non so nemmeno cosa rappresentano!

    Il salvataggio nelle quattro liste lo puoi fare così:

    lista_rum1 = []
    lista_rum2 = []
    lista_rum3 = []
    lista_rum4 = []
    a = len(result)
    for i in range(0, a-1):
        for j in range(i+1,a-1):
            # qui metti il metodo di filtraggio
            if .... :
            	# qui copi la lista nella lista_rumN
            	if .... :
            		lista_rum1.append(result[j])
            	elif .... :
            		lista_rum2.append(result[j])
            	elif .... :
            		# eccetera
             result[j] = [0,0]
    
    end = False
    
    while not end:
        try:
            result.remove([0,0])
        except ValueError:
            end = True
    
    print(result)
  • Re: Operazioni su liste con cicli while/for

    Ciao si avevo già risolto con una soluzione più semplice. grazie tante comunque :)

Devi accedere o registrarti per scrivere nel forum
4 risposte