2011-05-25 2 views
1

Je suis avoir deux listes:problème avec la recherche opération

a= [['A', 'B', 'C', 3], ['P', 'Q', 'R', 4]] 

b=[['K',1,1,1,1,1], ['L',1,1,1,1,1], ['M', 1,1,0,1,1], ['J', 0,0,0,0,0], ['A', 0,0,0,1,1], ['P',0,1,0,1,1 ]] 

Je veux la sortie comme:

Output=[['A', 0,0,0,1,1], ['P',0,1,0,1,1 ]] 

Je suis en train de rechercher l'a dans b en utilisant l'un [IDX] [0 ] Ensuite, je veux collecter ces éléments et aimerais que la sortie ressemble à celle ci-dessus.

Mon code ressemble:

Output=[] 
for idx in range(len(Test)): 
    a_idx = [y[0] for y in b].index(a[idx][0]) 
    a_in_b = b[a_idx] 
    Output.append(a_in_b[:]) 

print Output 

Cela ne me donne pas la sortie désirée. Puis-je avoir une aide s'il vous plait?

Répondre

1

Alors que la réponse de eumiro est meilleur, vous avez demandé une version qui utilise l'index. Ma version semble fonctionner de manière cohérente:

a= [['A', 'B', 'C', 3], ['P', 'Q', 'R', 4]] 
b=[['K',1,1,1,1,1], ['L',1,1,1,1,1], ['M', 1,1,0,1,1], ['J', 0,0,0,0,0], ['A', 0,0,0,1,1], ['P',0,1,0,1,1 ]] 
src = [y[0] for y in b]; # I moved this out here so that it is only calculated once 
Output = [] 
for i in range(len(a)): # You have Test here instead??? Not sure why 
    ai = src.index(a[ i ][ 0 ]) 
    Output.append(b[ ai ][:]) 
+0

Merci cela fonctionne pour moi. – user741592

9

D'abord, convertir b à un dictionnaire:

b=[['K',1,1,1,1,1], ['L',1,1,1,1,1], ['M', 1,1,0,1,1], ['J', 0,0,0,0,0], ['A', 0,0,0,1,1], ['P',0,1,0,1,1 ] 

d = dict((i[0], i[1:]) for i in b) 

# d is now: 
{'A': [0, 0, 0, 1, 1], 
'J': [0, 0, 0, 0, 0], 
'K': [1, 1, 1, 1, 1], 
'L': [1, 1, 1, 1, 1], 
'M': [1, 1, 0, 1, 1], 
'P': [0, 1, 0, 1, 1]} 

map Puis d-a:

Output = [ i[:1] + d[i[0]] for i in a] 

# Output is now: [['A', 0, 0, 0, 1, 1], ['P', 0, 1, 0, 1, 1]] 
+0

Je voudrais utiliser la méthode * index *. Toute autre façon d'utiliser l'index pour le code ci-dessus. – user741592

+4

@user: La méthode 'index' est moins efficace ici. Pourquoi voulez-vous l'utiliser? –

+0

La raison en est que j'ai déjà un code où j'ai une seule entrée dans * a * et la méthode d'index fonctionne pour cela. – user741592

Questions connexes