2014-06-20 14 views
5

Questo è l'esempio pratica:Python lista sottrazione

Scrivete una funzione (list1, list2) che prende in due liste come argomenti e restituire un elenco che è il risultato di rimozione di elementi da list1 che si possono trovare in list2.

Perché questa funzione restituisce [1, 3, 4] e non [4] come pensavo sarebbe? Penso che abbia qualcosa a che fare con list1.remove(). Immagino sia ovvio, ma non riesco a vederlo.

Funziona su questi esempi:

subtractList (['a', 'b', 'c', 'd'], ['x', 'y', 'z']) = 
    ['a', 'b', 'c', 'd'] 

subtractList([1,2,3,4,5], [2, 4]) = 
    [1, 3, 5] 

ma non su questo:

subtractList(range(5), range(4)) 

Inoltre ho notato che rimuove solo numeri pari dalla lista.

Ecco il codice:

def subtractList(list1,list2): 
    list1 = list(list1) 
    list2 = list(list2) 

    for i in list1: 
     if i in list2: 
      list1.remove(i) 

    return list1 

ho risolto questa pratica con:

def subtractList(list1,list2): 

    new_list = [] 

    list1 = list(list1) 
    list2 = list(list2) 

    for i in list1: 
     if i not in list2: 
      new_list.append(i) 

    return new_list 
+4

Correggere la formattazione, in particolare il vostro rientro. Così com'è, è difficile aiutarti. – Ffisegydd

+0

Stai usando Python 3 o Python 2? – Ffisegydd

+0

Inoltre, dato che stai già passando in lista (range (x) è anche una lista) non è più necessario convertirli in liste ('lista1 = lista (lista1)') – thumbtackthief

risposta

4

Modifica di un elenco come eseguire iterazioni su causerà problemi. La tua seconda soluzione è decente, oppure puoi consultare "list comprehensions". In questo caso:

new_list = [num for num in list1 if num not in list2] 
+0

Per quello che vale, per un principiante Python non penso che la causa del tuo errore sia qualcosa di ovvio. :) – thumbtackthief

4

impressionare il vostro professore per barare:

def subtract_list(l1, l2): 
    return list(set(l1) - set(l2)) 
+0

sì, ho pensato anche ai set lol – Jasko

+0

Questo potrebbe cambiare l'ordine di list1. – dawg