Encuentra un elemento en una lista de tuplas

Tengo una lista ‘a’

a= [(1,2),(1,4),(3,5),(5,7)] 

Necesito encontrar todas las tuplas para un número particular. decir por 1 será

 result = [(1,2),(1,4)] 

¿Cómo puedo hacer eso?

Si solo quieres que coincida el primer número, puedes hacerlo así:

 [item for item in a if item[0] == 1] 

Si solo estás buscando tuplas con 1 en ellas:

 [item for item in a if 1 in item] 

En realidad, hay una manera inteligente de hacer esto que es útil para cualquier lista de tuplas en las que el tamaño de cada tupla sea 2: puede convertir su lista en un solo diccionario.

Por ejemplo,

 test = [("hi", 1), ("there", 2)] test = dict(test) print test["hi"] # prints 1 

Leer en Lista Comprensiones

 [ (x,y) for x, y in a if x == 1 ] 

También lea las funciones del generador y la statement de yield .

 def filter_value( someList, value ): for x, y in someList: if x == value : yield x,y result= list( filter_value( a, 1 ) ) 
 [tup for tup in a if tup[0] == 1] 
 for item in a: if 1 in item: print item 

Usando la función de filtro:

  >>> def get_values ​​(iterables, key_to_find): 
lista de retorno (filtro (lambda x: key_to_find en x, iterables)) >>> a = [(1,2), (1,4), (3,5), (5,7)] >>> get_values ​​(a, 1) >>> [(1, 2), (1, 4)]
 >>> [i for i in a if 1 in i] 

[(1, 2), (1, 4)]

La función de filter también puede proporcionar una solución interesante:

 result = list(filter(lambda x: x.count(1) > 0, a)) 

que busca las tuplas en la lista para cualquier ocurrencia de 1 . Si la búsqueda se limita al primer elemento, la solución se puede modificar en:

 result = list(filter(lambda x: x[0] == 1, a)) 

O takewhile , (además de esto, se muestra un ejemplo de más valores):

 >>> a= [(1,2),(1,4),(3,5),(5,7),(0,2)] >>> import itertools >>> list(itertools.takewhile(lambda x: x[0]==1,a)) [(1, 2), (1, 4)] >>> 

Si no está clasificado, como

 >>> a= [(1,2),(3,5),(1,4),(5,7)] >>> import itertools >>> list(itertools.takewhile(lambda x: x[0]==1,sorted(a,key=lambda x: x[0]==1))) [(1, 2), (1, 4)] >>>