2017-09-22 7 views
1
some_list = [[app_num, product, prod_size, prod_amt]] 
other_list = [[app_num, product, prod_size, prod_amt]] 

J'ai deux listes de listes. Il n'y a pas de correspondance entre some_list et other_list pour app_num. Cependant, pour un app_num donné dans other_list, le produit, prod_size_ et prod_amt peuvent être les mêmes que dans un app_num donné dans some_list. J'essaye de créer un final_some_list qui est le même que some_list, excepté qu'il a supprimé n'importe quel élément de liste de some_list si cet élément de liste a le même produit, prod_size, et prod_amt en tant qu'élément dans other_list.Python - comparer deux listes imbriquées et écrire une troisième liste imbriquée

J'ai essayé d'imbriquer des boucles, la compréhension de liste (ci-dessous sont quelques exemples de nombreuses tentatives échouées).

final_some_list = [app for app in some_list for other_app in other_list 
if not app[1] == other_app[1] and app[2] == other_app[2] and app[3] == 
other_app[3] 

final_some_list = [app for app in some_list for other_app in other_list 
if not app[1] and app[2] and app[3] == in other_app 
+0

Pouvez-vous donner un exemple d'entrée et de sortie souhaitée, de sorte que Est-il plus facile pour quiconque de comprendre votre question? –

Répondre

2
final_some_list = [x for x in some_list if all(x[1:] != y[1:] for y in other_list)] 
+0

Très élégant, merci! – vintagedeek

0

Seule la première comparaison contient l'attribut not, ajouter = à toutes les comparaisons et cela devrait fonctionner:

final_some_list = [app for app in some_list for other_app in other_list 
if app[1] != other_app[1] and app[2] != other_app[2] and app[3] != 
other_app[3]]