Filtrar y mapa en uno? (Pitón) -- python campo con map campo con filter camp Relacionados El problema

filter and map in one? (Python)


2
vote

problema

Español

El problema:

  def detect_monitors_and_modes(preferred_order, binp):     out = run_xrandr(binp)     findit = partial(get_mon_mode, preferred_order)     print 'OUTPUT', ' '.join(out)     lst = map(findit, out)     print 'lst', lst     matches = filter(lambda x: x, lst)     print 'matches', matches   OUTPUT Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192 LVDS1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 194mm    1366x768       60.1*+   40.1    1360x768       59.8     60.0    1024x768       60.0    800x600        60.3     56.2    640x480        59.9 VGA1 disconnected (normal left inverted right x axis y axis) HDMI1 disconnected (normal left inverted right x axis y axis) DP1 disconnected (normal left inverted right x axis y axis)  lst [None, 'LVDS1', '1366x768', None, None, None, None, None, None, None, None] matches ['LVDS1', '1366x768']   

Específicamente, me pregunto si hay una forma más corta / más idiomática de hacer esto:

  lst = map(findit, out) matches = filter(lambda x: x, lst)   

Obviamente, no puedo usar solo filter BC Esto devolvería la línea completa ( LVDS1 connected 1366x768+0+0 (normal... ) en lugar del valor devuelto por findit . Y map devuelve None s para líneas que no coinciden.

(¿Hay algún uso para reduce aquí? Pero como no es kosher ..)

Editar: Quiero filtrar los valores de "falsedad" aquí, es decir, las cadenas vacías, None S, False y así sucesivamente, deje solo qué lst = map(findit, out) matches = filter(lambda x: x, lst) 0 encuentra una coincidencia positiva.

Original en ingles

The problem:

def detect_monitors_and_modes(preferred_order, binp):     out = run_xrandr(binp)     findit = partial(get_mon_mode, preferred_order)     print 'OUTPUT', '\n'.join(out)     lst = map(findit, out)     print 'lst', lst     matches = filter(lambda x: x, lst)     print 'matches', matches   OUTPUT Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192 LVDS1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 194mm    1366x768       60.1*+   40.1    1360x768       59.8     60.0    1024x768       60.0    800x600        60.3     56.2    640x480        59.9 VGA1 disconnected (normal left inverted right x axis y axis) HDMI1 disconnected (normal left inverted right x axis y axis) DP1 disconnected (normal left inverted right x axis y axis)  lst [None, 'LVDS1', '1366x768', None, None, None, None, None, None, None, None] matches ['LVDS1', '1366x768'] 

Specifically, I wonder if there is a shorter/more idiomatic way to do this:

lst = map(findit, out) matches = filter(lambda x: x, lst) 

Obviously, I can't use just filter bc this would return entire line (LVDS1 connected 1366x768+0+0 (normal...) instead of value returned by findit. And map returns Nones for lines that do not match.

(is there some use for reduce here? but since it's not kosher..)

EDIT: I want to filter out "falsy" values here, that is, empty strings, Nones, False and so on, leave only what findit finds as positive match.

        

Lista de respuestas

3
 
vote
vote
La mejor respuesta
 

Quiero filtrar los valores de "falsedad" aquí, es decir, cadenas vacías, nlas, falsas, etc., dejar solo lo que Findit encuentra como partido positivo.

Podría simplificar:

  matches = filter(None, map(findit, out))   

Según los documentos:

Si es Función es None , se supone que la función de identidad es, es decir, todos los elementos de iterable que son falsos se eliminan.

para referencia:

  • http://docs.python.org/2/library/Functions. Filtro HTML #
 

I want to filter out "falsy" values here, that is, empty strings, Nones, False and so on, leave only what findit finds as positive match.

You could simplify to:

matches = filter(None, map(findit, out)) 

as per the docs:

If function is None, the identity function is assumed, that is, all elements of iterable that are false are removed.

For reference:

  • http://docs.python.org/2/library/functions.html#filter
 
 
   
   
1
 
vote

Sí, está utilizando las comprensiones de la lista

  matches = [findit(x) for x in out if findit(x) is not None]   

Esta es la forma "Pythonic" de hacerlo como lo describe el PEP

 

Yes there is, using list comprehensions

matches = [findit(x) for x in out if findit(x) is not None] 

This is the "pythonic" way to do it as described by the PEP's

 
 
       
       

Relacionados problema

1  Filtrando cada columna de un marco de datos un PUT NA para valores inigualables  ( Filtering each column of a data frame an put na for unmatched values ) 
Tengo una tabla de la siguiente manera: [,1] [,2] [,3] [,4] [,5] [1,] a A 0.06 0.31 -1.5 [2,] b B -0.75 0.2 0.02 [3,] ...

1  ¿Cómo usar filtros en un cuadrícula de cuadrícula?  ( How to use filters in a gridpanel ) 
Estoy empezando en la ruta de EXTJS 4 y necesito usar la función Filtros de GridPanel. Aquí está el código para mi panel: var panel = Ext.create("Ext.gri...

0  Cómo obtener entre Fecha de filtración en la fila del filtro  ( How to get between date filtering into the filter row ) 
Estoy tratando de usar un Devexpress AspxgridView para mostrar algunos datos. Necesito permitir que mis usuarios se filtre en una columna en particular, y me ...

-1  Lista de filtrado por rango de fecha (Fundación SharePoint 2010)  ( List filtering by date range sharepoint foundation 2010 ) 
¿Cómo puedo filtrar una lista por rango de fechas en SharePoint 2010 Foundation6 ? Descubrí cómo en SharePoint2010 , pero en la versión de la Fundación no...

1  Cómo buscar palabras de grupo en DIV Panel  ( How to search group words in div panel ) 
Hice este Fiddle para mostrarle lo que quiero. Tengo varios paneles con palabras dentro de ellos. Cada palabra dentro del panel está separada por <br> . ...

0  Filtro XSL en Seleccionar  ( Xsl filter on select ) 
Me gustaría seleccionar todos los nodos descendiente pero "blog". Para el ejemplo, solo el subárbol debe aparecer en la salida. Estoy intentando este código X...

1  ¿Cómo filtro un vector de acuerdo con la matriz en estadísticas :: BASIC :: CUPTEDVECTOR?  ( How do i filter a vector according to array in statisticsbasiccomputedvector ) 
Quiero usar una estadísticas :: Basic :: ComputedVector numericUpDown5 , pero el filtro que quiero usar es una matriz de 1 y 0's. ¿Esto es posible? Esto ...

1  DirectShow Push Fuentes, sincronización y marca de tiempo  ( Directshow push sources syncing and timestamping ) 
Tengo un gráfico de filtro que lleva la entrada de audio y video en bruto y luego usa el escritor ASF para codificarlos a un archivo WMV. He escrito dos fil...

6  Bloc de notas ++ Filtros de archivo  ( Notepad file filters ) 
Me preguntaba si era posible enumerar una exclusión dentro de los filtros de archivos en la funcionalidad "Buscar en archivos" de Blocad ++. Por ejemplo, lo...

1  EXTJS GRIDFILTER valores a PHP  ( Extjs gridfilter values to php ) 
Estoy usando extjs v2.0. Me gustaría tomar los valores gridfilter y pasarlos a una página PHP como $_POST , $_GET , $variable o Cualquier método posible...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos