Encuentra un elemento en una lista de tuplas


140

Tengo una lista 'a'

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

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

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

¿Cómo puedo hacer eso?

Respuestas:


236

Si solo desea que el primer número coincida, puede hacerlo así:

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

Si solo está buscando tuplas con 1 en ellas:

[item for item in a if 1 in item]

115

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

Por ejemplo,

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

11
¿Cómo aplicas esto al problema de Bruce?
HelloGoodbye

55
Buena respuesta (aunque posiblemente no para esta pregunta). Me funcionó bien para determinar si un valor estaba en una lista de tuplas de elección (por ejemplo, si "hola" en la prueba)
MagicLAMP

10
Realmente no responde la pregunta, como sugiere MagicLAMP. Específicamente, dict(X)convierte X en un diccionario donde la última tupla de cualquier primer elemento común es el valor que se utiliza. En el ejemplo del OP, esto devolvería (1,4) en oposición a ambos (1,2) y (1,4).
BBischof





1

La filterfunción 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))

1

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)]

1

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á ordenado, 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)]
>>> 

0

si desea buscar en la tupla cualquier número que esté presente en la tupla, puede usar

a= [(1,2),(1,4),(3,5),(5,7)]
i=1
result=[]
for j in a:
    if i in j:
        result.append(j)

print(result)

También puede usar if i==j[0] or i==j[index]si desea buscar un número en un índice particular

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.