22

Por ejemplo, si tiene n listas de bools de la misma longitud, entonces booleano con elementos Y debe devolver otra lista de esa longitud que tenga True en aquellas posiciones donde todas las listas de entrada tienen True y False en todas partes.¿Hay funciones integradas para operadores booleanos con elementos sobre listas booleanas?

Es bastante fácil de escribir, solo preferiría usar una versión integrada si existe (por el bien de la estandarización/legibilidad).

Aquí es una implementación de elementwise Y:

def eAnd(*args): 
    return [all(tuple) for tuple in zip(*args)] 

ejemplo de uso:

>>> eAnd([True, False, True, False, True], [True, True, False, False, True], [True, True, False, False, True]) 
[True, False, False, False, True] 

Respuesta

17

No hay una forma integrada de hacerlo. En términos generales, las comprensiones de listas y similares son cómo se realizan las operaciones con elementos en Python.

Numpy proporciona esto (usando &, por limitaciones técnicas) en su tipo de matriz. Las matrices numeradas normalmente realizan operaciones de forma factorial.

1

No, no hay tales muebles empotrados. Su método usando zip y all/any es lo que usaría.

1

No, no creo que exista tal función en la biblioteca estándar ... especialmente cuando es tan fácil escribir en términos de las funciones que se proporcionan.

2

La función numpy.all hace lo que quiere, si especifica la dimensión de colapsar en:

>>> all([[True, False, True, False, True], [True, True, False, False, True], [True, True, False, False, True]], 0) 
array([ True, False, False, False, True], dtype=bool) 
+0

El 'all' función que usted se refiere no es una función incorporada, sin embargo; eso es 'numpy.all'. – DSM

+0

Gracias - corregido para reflejar esto. – Tom

12

Probar:

[ x&y for (x,y) in zip(list_a, list_b)] 
+0

para mí esto parece realmente pitónico y tampoco es necesario importar numpy – NiCU

+0

Si es posible, aún así recomiendo numpy, ya que es de órdenes de magnitud más rápido, y la sintaxis es aún más fácil de leer: arr1 & arr2 te da una variedad de resultados. – Zak

+0

@Zak: Estoy de acuerdo, especialmente si list_a, list_b son largas o ya son matrices numpy. De lo contrario, pagas para convertirlos. – ntg

Cuestiones relacionadas