2010-11-19 15 views
5

Mam zagnieżdżonej listy: {{9, 8, 7}, {8, 7, 6}, {7, 6, 5}, {6, 5, 4}, {5, 4, 3}, {4, 3, 2}, {3, 2, 1}}Sortowanie list wewnątrz zagnieżdżonych list

muszę uporządkować list w liście, aby utworzyć:

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

jaki sposób mogę to zrobić?

+0

mogłem dostać to, co w rzeczywistości oznacza pytanie. Czy mógłbyś wyjaśnić problem, z którym się mierzysz? – vinothkr

Odpowiedz

9

Chcesz funkcję Map, która stosuje funkcję do każdego elementu listy.

Oznacza to, że Map[f, {1, 2, 3}] podaje {f[1], f[2], f[3]}.

W tym przypadku można użyć Map[Sort, list]. Map posiada również operatora Infix, /@:

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

mogą być użyteczne mieć świadomość, że Zamawiający będzie również pracować

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] 

Ale dla tego typu przykład podejście jest wolniejszy niż mapa/Sortuj

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

{0,175955 NULL}

{1,02087, Null}

Kolejność może być przydatna do sortowania według pozycji

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

alt text

+0

Tak, to wszystko. Mapa była tym, o czym myślałam. Dziękuję bardzo. – Ron

Powiązane problemy