Tengo una lista 2D de elementos y necesito extraer:

  1. El número de elementos diferentes de una columna específica.
  2. Los nombres de esos elementos diferentes de esa columna específica
mylist=[[1.0, u'1', u'COMPLETED', u' ARC',  30.0, 1.0, u'06/02/2014 09:20:18',u'2 CCW'],
      [1.0, u'1', u'COMPLETED', u' ARC ', 30.0, 1.0, u'04/02/2014 09:15:56',u'1 CW'],
      [1.0, u'1', u'COMPLETED', u' ARC ', 30.0, 1.0, u'07/02/2014 12:15:56',u'1 CW'],
      [1.0, u'1', u'COMPLETED', u' REP',  30.0, 1.0, u'06/02/2014 09:20:18',u'2 CCW'],
      [1.0, u'1', u'COMPLETED', u' REP',  30.0, 1.0, u'12/02/2014 09:20:18',u'1 CW'], 
      [1.0, u'1', u'COMPLETED', u' REP',  30.0, 1.0, u'12/02/2014 09:20:18',u'1 CW']]

En esta lista, me gustaría verificar, por ejemplo, la columna número 4 list[3]. La idea es extraer el número de entradas para ARC y REP y también los nombres ARC y REP. Hasta ahora, lo que he logrado hacer es lo siguiente:

  1. Transponga la "matriz" para obtener todos los elementos juntos

    newlist = zip(*mylist)[3]
    
  2. recorrer los diferentes elementos en newlist

Solo quería saber si hay una manera más eficiente de hacer esto

0
Manolete 28 ago. 2014 a las 14:42

2 respuestas

La mejor respuesta

Agregue estos elementos a un conjunto:

newlist = [u[3].strip() for u in list]
s = set(newlist)

Entonces len (s) será el número de elementos únicos, y los elementos mismos son miembros del conjunto.

Hacerlo de una vez también está permitido:

>>> s = set([u[3].strip() for u in list])
>>> s
set([u'REP', u'ARC'])
1
Ashalynd 28 ago. 2014 a las 10:45

Si necesita recorrer los valores de todos modos , también puede omitir zip() y realizar su procesamiento en un ciclo simple:

unique = set()
all = []
for row in mylist:
    value = row[3].strip()
    unique.add(value)
    all.append(value)

O mejor aún, haga lo que quiera hacer con value allí mismo, en lugar de agregarlo a all. unique crea un conjunto de valores únicos.

Al usar un bucle explícito también introduje una llamada str.strip() para normalizar la columna; tiene mucha variación en la cantidad de espacios en blanco allí. Es posible que desee ajustar cómo crea la lista en primer lugar.

1
Martijn Pieters 28 ago. 2014 a las 13:03