La recherche d'un 2-Dimensions Tuple/Liste en Python
Je recherche un tuple of tuples
pour une chaîne de caractères et renvoie l'index de la mère n-uplet. J'semblent fonctionner dans les variations de ce type de recherche fréquemment.
Ce qui est le plus pythonic façon de le faire?
I. E:
derp = (('Cat','Pet'),('Dog','Pet'),('Spock','Vulcan'))
i = None
for index, item in enumerate(derp):
if item[0] == 'Spock':
i = index
break
>>>print i
2
Je peut généraliser cela en un petit utilitaire fonction qui prend un objet iterable, un index (je l'ai codé en dur 0
dans l'exemple) et une valeur de recherche. Il fait le tour mais j'ai cette idée qu'il y a probablement un one-liner 😉
I. E:
def pluck(iterable, key, value):
for index, item in enumerate(iterable):
if item[key] == value:
return index
return None
Pourquoi voulez-vous à l'index et pas de la valeur?
Juste un contexte particulier. Une autre fonction, je prend un n-uplet et et index, puis dit: "le tuple à l'indice i est l'une de celle qui est actuellement active."
Juste un contexte particulier. Une autre fonction, je prend un n-uplet et et index, puis dit: "le tuple à l'indice i est l'une de celle qui est actuellement active."
OriginalL'auteur Koobz | 2010-02-05
Vous devez vous connecter pour publier un commentaire.
Le one-liner est probablement pas la pythonic façon de le faire 🙂
La méthode que vous avez utilisé a l'air bien.
Modifier:
Si vous voulez être mignon:
next
prend un générateur d'expression et renvoie la valeur suivante ou le deuxième argument (dans ce casNone
) une fois que le générateur a été épuisé.OriginalL'auteur HS.
Ou vous pouvez le faire:
par exemple.
qui vous donnera un 'Animal de compagnie'
la forte réponse a été posté le Fév 2010, et ce sur Nov 2012, c'est peut-être pourquoi 🙂
OriginalL'auteur Siddharth Srivastava
Si vous êtes souvent à la recherche de la même tuple, vous pouvez construire un dict.
OriginalL'auteur
Une autre façon de le faire en une seule ligne serait:
Je ne suis pas sûr si l'itérateur évalue toutes les valeurs avant l'appel de l'indice, et donc inefficaces.
OriginalL'auteur Mr Shark
Lambdas sont amusants!
filter()
sont: (1) il va toujours à la recherche de l'ensemble de la liste, et (2) il sera de retour une liste de matchs, plutôt que n'importe quel match de l'index.(1) vrai (2) peut être contourné avec une carte ou de réduire (voir post édité)
Par ailleurs, le code original posté est fine et ne dispose pas de cette "faille". Aimer lambdas est un trait personnel 😉
peut-être que je suis absent quelque chose: quel est le problème avec les arracher de la fonction définie par Koobz? À mon humble avis est plus lisible, plus générique, et avec de meilleures performances:
100000 loops, best of 3: 1.37 usec per loop
pour la fonction définie par Koobz et100000 loops, best of 3: 5.82 usec per loop
pour le vôtre.Unpythonic, long, inefficace, et illisible.
OriginalL'auteur ron