2012-06-10 12 views
6

que tienen una lista anidada 3 nivel en maravilloso como estovalores recibiendo de listas anidadas en maravilloso

rList = [[[12, name1],[22,name2],[49,name3]],[[33, name5],[22,name6],[21, name7]]] 

cómo puedo reiterar que para obtener los valores de nombre de la primera sublista así que quiero como rsublist = [name1, name2, name3]

Gracias de antemano.

Respuesta

7
rList = [[[12, 'name1'], [22, 'name2'], [49, 'name3']], [[33, 'name5'], [22, 'name6'], [21, 'name7']]] 
names = rList[0]*.getAt(1) 
assert names == ['name1', 'name2', 'name3'] 

En primer lugar, rList[0] le da el primer sub-lista, que es [[12, name1], [22, name2], [49, name3]]. Luego, spread operator, *., se utiliza para aplicar el mismo método, getAt(1), a cada elemento de esa lista, que devolverá una lista con cada segundo elemento de las listas secundarias, que son los valores que estaba buscando :)

También puede usar rList[0].collect { it[1] } que es equivalente y podría ser más familiar si no está acostumbrado al operador de propagación.

+0

Gracias! funciona perfecto –

2

Sobre la base de la @epidemian's answer, aquí es una versión más legible:

rList.first()*.last() 
+0

+1 = D. Fuera de tema: el resaltador de sintaxis en StackOverflow es realmente extraño. ¿Por qué la llamada al método 'last' tiene un color diferente que' first'? Creo que solo reconoce un par de palabras clave "generales" y formas de sintaxis (como comentarios y literales de cadenas, que son bastante similares entre diferentes idiomas). Ojalá fuera algo más poderoso, tal como el reconocimiento de lenguaje y sintaxis de GitHub. – epidemian

Cuestiones relacionadas