Cela fonctionne également:
zip(*elements)[1]
(Je poste principalement ceci, pour me prouver que j'ai groked zip
...)
Voyez-le en action:
>>> help(zip)
Aide sur la fonction intégrée zip dans le module intégré :
Zip *: français(...)
zip (seq1 [, seq2 [...]]) -> [(seq1 [0], seq2 [0] ...), (...)]
Renvoie une liste de tuples, où chaque tuple contient le i-ème élément de chacune des séquences d'arguments. La liste renvoyée est tronquée en longueur à la longueur de la séquence d'arguments la plus courte.
>>> elements = [(1,1,1),(2,3,7),(3,5,10)]
>>> zip(*elements)
[(1, 2, 3), (1, 3, 5), (1, 7, 10)]
>>> zip(*elements)[1]
(1, 3, 5)
>>>
Chose intéressante que j'ai apprise aujourd'hui: utiliser *list
dans les arguments pour créer une liste de paramètres pour une fonction ...
Remarque : dans Python3, zip
renvoie un itérateur, utilisez-le list(zip(*elements))
à la place pour renvoyer une liste de tuples.
**dict
pour créer des arguments de mots-clés:def test(foo=3, bar=3): return foo*bar
puisd = {'bar': 9, 'foo'=12}; print test(**d)
Il y a un autre moyen. Vous pouvez également le faire avec map et itemgetter :
Cela exécute toujours une boucle en interne et c'est légèrement plus lent que la compréhension de la liste:
Résultats:
Si vous avez besoin d'itérer sur une liste, l'utilisation de a
for
est très bien.la source
J'ai trouvé ceci pendant que je cherchais la manière la plus rapide d'extraire le deuxième élément d'une liste de 2 tuples. Pas ce que je voulais, mais j'ai exécuté le même test que celui indiqué avec une troisième méthode et tester la méthode zip
Donc, deux fois plus vite si vous avez une paire de 2 tuples pour simplement convertir en un dict et prendre les valeurs.
la source
dict(elements).values()
cela entraînera un dict à un élément par opposition à la compilation de liste ou à la carte. C'est exactement ce que je voulais (j'étais intéressé par les touples uniques) (+1 et un grand merci pour la publication), mais d'autres pourraient se demander pourquoi dict est plus rapide - il n'alloue pas de mémoire mais vérifie uniquement par rapport à l'élément existant.Timings for Python 3.6 pour extraire le deuxième élément d'une liste à 2 tuples.
Ajout de la
numpy
méthode de tableau, qui est plus simple à lire (mais sans doute plus simple que la compréhension de liste).et les horaires:
Notez que
map()
etzip()
ne retournez plus de liste, d'où la conversion explicite.la source
la source
Utilisation
islice
etchain.from_iterable
:Cela peut être utile lorsque vous avez besoin de plusieurs éléments:
la source