Python, elimina todas las apariciones de cadena en la lista

Digamos que tengo una lista:

main_list = ['bacon', 'cheese', 'milk', 'cake', 'tomato'] 

y otra lista:

 second_list = ['cheese', 'tomato'] 

y quiero eliminar todos los elementos que se encuentran en la segunda lista, de la lista principal?

Gracias de antemano

Adán

Si el orden no es importante puedes usar sets :

 >>> main_array = ['bacon', 'cheese', 'milk', 'cake', 'tomato'] >>> second_array = ['cheese', 'tomato'] >>> set(main_array) & set(second_array) set(['tomato', 'cheese']) 

Aquí usamos el operador de intersección, & . Si solo quiere elementos que no se encuentran en su segunda lista, podemos usar la diferencia, - :

 >>> set(main_array) - set(second_array) set(['cake', 'bacon', 'milk']) 
 new_array = [x for x in main_array if x not in second_array] 

Sin embargo, esto no es muy eficaz para listas grandes. Puede optimizar utilizando un conjunto para second_array :

 second_array = set(second_array) new_array = [x for x in main_array if x not in second_array] 

Si el orden de los elementos no importa, puede usar un conjunto para ambas matrices:

 new_array = list(set(main_array) - set(second_array)) 
 main_array = set(['bacon', 'cheese', 'milk', 'cake', 'tomato']) second_array = (['cheese', 'tomato']) main_array.difference(second_array) >>> set(['bacon', 'cake', 'milk']) main_array.intersection(second_array) >>> set(['cheese', 'tomato']) 
 l = [u'SQOOP', u'SOLR', u'SLIDER', u'SFTP', u'PIG', u'NODEMANAGER', u'JSQSH', u'HCAT', u'HBASE_REGIONSERVER', u'GANGLIA_MONITOR', u'FLUME_HANDLER', u'DATANODE', u'BIGSQL_WORKER'] p = [u'SQOOP', u'SOLR', u'SLIDER', u'SFTP'] l = [i for i in l if i not in [j for j in p]] print l [u'PIG', u'NODEMANAGER', u'JSQSH', u'HCAT', u'HBASE_REGIONSERVER', u'GANGLIA_MONITOR', u'FLUME_HANDLER', u'DATANODE', u'BIGSQL_WORKER']