Topic: confronto liste python  (Letto 85 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline steshows

  • python unicellularis
  • *
  • Post: 1
  • Punti reputazione: 0
    • Mostra profilo
confronto liste python
« il: Febbraio 25, 2021, 16:28 »
Ciao a tutti!
Sto avendo problemi nel risolvere questo esercizio in python:

"definire la funzione Sposta con parametri a,b,c,d. I primi tre parametri sono liste di numeri interi mentre il parametro d è un intero positivo.Per ogni posizione k della lista a, se nella lista b sono contenuti almeno d valori maggiori di a[k] allora il valore in a[k] deve essere sostituito con il suo opposto e k deve essere aggiunto alla lista c"

Il mio problema consiste nel confrontare ogni elemento di a con b. Io pensavo di lavorare sulle posizioni e quindi impostare la soluzione con "for k in range(len(a))" però in questo modo confronto ogni elemento di a con ogni elemento di b in quella posizione e non credo sia la strada giusta. Per quanto riguarda la sostituzione e l'aggiunta della posizione nella lista c non ho nessun problema.

Grazie mille a chi risponderà!

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 381
  • Punti reputazione: 0
    • Mostra profilo
Re:confronto liste python
« Risposta #1 il: Febbraio 26, 2021, 07:47 »
Rispondendo NON ti faccio un favore, non hai neanche abbozzato un tentativo di soluzione da proporre, una soluzione "fornita" non è istruttiva come una "trovata"

Quanto segue utilizza una comprehensions, due liste prodotte a caso, una per il risultato e la funzione che chiedi :
>>> len_a = random.randint(10, 20)
>>> len_a
13
>>> a = []
>>> for i in range(len_a):
a.append(random.randint(1, 100))


>>> len_b = random.randint(10, 20)
>>> b = []
>>> for i in range(len_b):
b.append(random.randint(1, 100))


>>> c = []
>>> a
[90, 67, 46, 51, 1, 46, 91, 23, 90, 60, 3, 51, 86]
>>> b
[70, 7, 73, 22, 41, 66, 54, 15, 96, 26, 93, 85]
>>> c
[]
>>> def sposta(a, b, c, d):
for k in range(len(a)):
if len([x for x in b if x > a[k]]) > d:
c.append(a[k])
a[k] = -a[k]


>>> sposta(a, b, c, 3)
>>> a
[90, -67, -46, -51, -1, -46, 91, -23, 90, -60, -3, -51, 86]
>>> b
[70, 7, 73, 22, 41, 66, 54, 15, 96, 26, 93, 85]
>>> c
[67, 46, 51, 1, 46, 23, 60, 3, 51]
>>>

Non credo che le comprehensins siano comprese nel Tuo attuale livello di studio, soluzione alternativa potrebbe essere l'utilizzo di due cicli for annidati con un contatore, Te la lascio per esercizio.

Ciao