2009-04-07 7 views
20

Je suis sûr qu'il y a une bonne façon de faire cela en Python, mais je suis assez nouveau dans la langue, alors pardonnez-moi si c'est facile!Saisie d'éléments d'une liste python qui ont des index spécifiques

J'ai une liste, et je voudrais choisir certaines valeurs de cette liste. Les valeurs que je veux choisir sont celles dont les index dans la liste sont spécifiés dans une autre liste.

Par exemple:

indexes = [2, 4, 5] 
main_list = [0, 1, 9, 3, 2, 6, 1, 9, 8] 

la sortie serait:

[9, 2, 6] 

(à savoir, les éléments avec les indices 2, 4 et 5 de main_list). J'ai l'impression que cela devrait être faisable en utilisant quelque chose comme la compréhension des listes, mais je n'arrive pas à comprendre (en particulier, je n'arrive pas à comprendre comment accéder à l'index d'un item quand j'utilise une compréhension de liste) .

Répondre

67
[main_list[x] for x in indexes] 

Ceci renvoie une liste des objets, en utilisant une compréhension de la liste.

+1

maintenant c'est élégant. +1 –

+1

La compréhension des listes est très cool et facile à lire. Ils s'avèrent souvent plus rapides qu'itérer, aussi. –

+0

C'est vraiment sympa. Exactement le genre de chose que je voulais, sans m'en rendre compte! – Ben

2
t = [] 
for i in indexes: 
    t.append(main_list[i]) 
return t 
+0

Bien que ce soit moins élégant qu'une compréhension de liste, je l'aime mieux comme une réponse pour quelqu'un de complètement nouveau à Python. –

1

Je pense que la solution de Yuval A est assez claire et simple. Mais si vous voulez vraiment une compréhension de la liste d'une ligne:

[e for i, e in enumerate(main_list) if i in indexes] 
+0

En fait, c'est beaucoup plus élégant :) Bien que légèrement moins lisible –

+0

Ah! C'est le genre de chose à laquelle je pensais. Très propre! – Ben

1
map(lambda x:main_list[x],indexes) 
Questions connexes