2010-11-19 15 views
5

que tienen una lista anidada: {{9, 8, 7}, {8, 7, 6}, {7, 6, 5}, {6, 5, 4}, {5, 4, 3}, {4, 3, 2}, {3, 2, 1}}listas de clasificación dentro de las listas anidadas

necesito para ordenar las listas dentro de la lista para crear:

{{7, 8, 9}, {6, 7, 8}, {5, 6, 7}, {4, 5, 6}, {3, 4, 5}, {2, 3, 4}, (1, 2, 3}}

¿Cómo se hace esto?

+0

me podía conseguir lo que realmente significa la pregunta. ¿Podría explicar el problema al que se enfrenta – vinothkr

Respuesta

9

Desea la función Map, que aplica una función a cada elemento de una lista.

Es decir, Map[f, {1, 2, 3}] da {f[1], f[2], f[3]}.

En este caso, puede usar Map[Sort, list]. Map también tiene un operador infijo, /@:

In[1]:= Map[Sort, {{9, 8, 7}, {8, 7, 6}, {7, 6, 5}, {6, 5, 4}, 
    {5, 4, 3}, {4, 3, 2}, {3, 2, 1}}] 

Out[1]= {{7, 8, 9}, {6, 7, 8}, {5, 6, 7}, {4, 5, 6}, 
    {3, 4, 5}, {2, 3, 4}, {1, 2, 3}} 

In[2]:= Sort /@ {{9, 8, 7}, {8, 7, 6}, {7, 6, 5}, {6, 5, 4}, 
    {5, 4, 3}, {4, 3, 2}, {3, 2, 1}} 

Out[2]= {{7, 8, 9}, {6, 7, 8}, {5, 6, 7}, {4, 5, 6}, 
    {3, 4, 5}, {2, 3, 4}, {1, 2, 3}} 
0

puede ser útil tener en cuenta que Ordenando también trabajará

lst = {{9, 8, 7}, {8, 7, 6}, {7, 6, 5}, {6, 5, 4}, {5, 4, 3}, {4, 3, 
    2}, {3, 2, 1}}; 
Map[#[[Ordering[#]]] &, lst] 

Pero para este tipo de ejemplo, el enfoque es más lento que en un mapa/Ordenar

lst2 = RandomInteger[100, {10^5, 3}]; 
Map[Sort, lst2]; // Timing 
Map[#[[Ordering[#]]] &, lst2]; // Timing 

{0.175955, Null}

{1.02087, Null}

El orden puede ser útil para la clasificación por posición

lst3 = {{a1, 4, c1}, {a2, 3, c2}, {b3, 1, d3}, {e4, 2, f4}}; 
lst3[[Ordering[lst3[[All, -2]]]]] // MatrixForm 

alt text

+0

Sí, eso es, Map es lo que tenía en mente. Muchas gracias. – Ron

Cuestiones relacionadas