2010-06-13 6 views
1

J'ai deux listes imbriquées de tailles différentes:Rechercher match dans une liste imbriquée en Python

A = [[1, 7, 3, 5], [5, 5, 14, 10]] 

B = [[1, 17, 3, 5], [1487, 34, 14, 74], [1487, 34, 3, 87], [141, 25, 14, 10]] 

Je voudrais rassembler toutes les listes imbriquées de la liste B si A [2: 4] == B [2: 4] et le mettre dans la liste l:

L = [[1, 17, 3, 5], [141, 25, 14, 10]] 

en outre, si le match se produit alors que je souhaite modifier le dernier élément de sous-liste B en premier élément de sous-liste A de sorte que la solution finale ressemblerait à ceci:

L1 = [[1, 17, 3, 1], [141, 25, 14, 5]] 

Répondre

3

Il ressemble à ceci fait ce que vous voulez:

> [b for b in B if b[2:4] in [a[2:4] for a in A]] 
[[1, 17, 3, 5], [141, 25, 14, 10]] 

Mais, pour des raisons d'efficacité, vous voudrez peut-être précalculer les tranches de A.

> a_slices = [a[2:4] for a in A] 
> [b for b in B if b[2:4] in a_slices] 
[[1, 17, 3, 5], [141, 25, 14, 10]] 

est ici quelque chose qui ressemble elle répond à vos nouvelles exigences:

> [b[:-1] + a[:1] for b in B for a in A if b[2:4] == a[2:4]] 
[[1, 17, 3, 1], [141, 25, 14, 5]] 
+0

La deuxième version se lit presque comme anglais. Plutôt doux. – zildjohn01

+0

Grande aide !! Je vous remercie. Je suis presque là. J'ai ajouté un élément d'information que j'aimerais inclure dans le code. – elfuego1

+0

@ elfuego1: Edité pour montrer. – Stephen

1
[x for x in B if any(x[2:4] == y[2:4] for y in A)] 
Questions connexes