Forum >> Principianti >> esercizio python

Pagina: 1

Salve a tutti . Ho qualche problema a capire come fare un esercizio .
Dati due array v ed s devo creare un programma che mi permette di stabilire se TUTTI gli elementi di s sono contenuti in v a prescindere dall'ordine in cui si trovano e senza utilizzare funzioni proprie di python ( per esempio issubset() o cose del genere)

Per cui se ho v=[6,3,1,7,8,9,5] ed s = [3,5,1] deve ritornare True

Potreste darmi qualche consiglio? Grazie mille a chi risponderà
Gli oggetti che stai utilizzando sono liste nel mondo Python.

Se non puoi usare le funzione built-in, potresti con poca fatica "ciclare" la seconda lista e verificare se i valori sono presenti nella prima. Esiste anche la possibilità di farlo in un solo passaggio, ma qui ti lascio il piacere della scoperta.

Butta giù due righe di codice e vediamo se sei sulla strada buona.

Cya


v=[6,3,1,7,8,9,5]

s = [3,4,1]

for i in range(len(s)):

>>> print ( s[ i ] in w )


in output ho True False True ma io vorrei semplicemente avere False

Provo a spiegare meglio il mio problema .Praticamente la traccia originale mi chiede di fare questo :

v=[4,6,12,7,15,18]

w=[6,3,1,5]

trovo i divisori di ogni elemento v ( Tranne l'elemento stesso )

per cui per esempio i divisori di 4 sono 1 , 2 , i divisori di 6 sono 1,2,3 e cosi per tutti gli elementi

dopo di che devo verificare se tutti i divisori sono contenuti in w . se tutti gli elementi sono contenuti li memorizzo in un altro array ,per cui alla fine dovrei avere z = [ 7,15 ] . il problema si presenta quando devo confrontare i divisori e gli elementi di w perchè come l'esempio di sopra in output ho

- 4 div = [1,2]

1 True

2 False

- 6 div =[1,2,3]

1 True

2 False

3 True

e alla fine mi trovo z = [4 , 6 , 6 .....eccetera ]




Scusa per questo papello lunghissimo ma spero di essere stata chiara nella spiegazione . Dove sbaglioo? :confused: :confused:









Ammesso che puoi farlo in molti modi, potresti ad esempio trasformare tutti in insiemi eliminando anche il problema di eventuali doppioni, ma tu non vuoi usare issubset(), quindi se vuoi usare a tutti i costi un ciclo per conoscere se i valori della seconda lista sono contenuti nella prima, ti basta anche un semplice:
>>> l1 = [1,2,3,4,5,6,10]
>>> l2 = [5,9,3,33]
>>> len([i for i in l2 if i not in l1])
2

>>> [i for i in l2 if i not in l1]
[9, 33]

>>> [i for i in l2 if i in l1]
[5, 3]
In un solo passaggio sai se i valori sono contenuti o meno, se puoi vuoi avere un True o un False direi che con poso sforzo lo ottieni senza problemi.

Questo può aiutarti?

Cya
Ho finito il programma e ho anche imparato una cosa nuova . Ti ringrazio infinitamente


Pagina: 1



Esegui il login per scrivere una risposta.