2012-10-09 42 views
11

que tienen una lista como la siguiente¿Cómo se determina si una lista bidimensional contiene un valor?

mylist = [('value1', 'value2', 'value3'), ('secval1', 'secval2', 'secval3')] 

qué es lo que veo si la lista contiene 'valor2'?

+0

Si desea ver el índice del valor dentro de la lista de 2 dimensiones, que utiliza esta respuesta: https://stackoverflow.com/a/6518412/1799272 – Oli4

Respuesta

20

Uso any():

any('value2' in sublist for sublist in mylist) 
+0

Gracias, estoy curioso si hay una manera de obtener el elemento que se emparejó? – Tommyka

+1

Para obtener el artículo que contiene el valor que está buscando, debe usar un ciclo 'for' normal y devolver o romper cuando' 'value2'' exista en la lista. Si quiere encontrar todos los elementos que coincidan, puede usar '[sublista para la sublista en mylist si 'valor2' en sublista] '. –

7

Simplemente puede comprobar todas las sublistas con any:

any('value2' in subl for subl in mylist) 
0

similar a any(), una solución que también es compatible con los cortocircuitos:

>>> from itertools import chain 
>>> mylist = [('value1', 'value2', 'value3'), ('secval1', 'secval2', 'secval3')] 
>>> 'value2' in chain(*mylist) 
True 

prueba de que cortocircuita como any():

>>> it=chain(*mylist) 
>>> 'value2' in it 
True 
>>> list(it) #part of iterable still not traversed 
['value3', 'secval1', 'secval2', 'secval3'] 
+0

'any' ya hace cortocircuitos. Pruébelo creando una clase que defina '__nonzero__', coloque una instrucción' print' allí, y úselo como el segundo valor en el argumento de 'any' (cuando el primero es' True'). La sentencia 'print' no se ejecutará. –

+0

@poorsod Lo sé, por eso dije '" similar a any() "'. :) –

+0

Oh, entendí mal - pensó que estaba sugiriendo un reemplazo para 'cualquiera' que usa cortocircuitos. –

2
'value2' in (item for sublist in mylist for item in sublist) 
Cuestiones relacionadas