Сортировка списков внутри вложенных списков - PullRequest
5 голосов
/ 19 ноября 2010

У меня есть вложенный список: {{9, 8, 7}, {8, 7, 6}, {7, 6, 5}, {6, 5, 4}, {5, 4, 3}, {4, 3, 2}, {3, 2, 1}}

Мне нужно отсортировать списки в списке, чтобы создать:

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

Как мне это сделать

Ответы [ 2 ]

9 голосов
/ 19 ноября 2010

Требуется функция Map, которая применяет функцию к каждому элементу списка.

То есть Map[f, {1, 2, 3}] дает {f[1], f[2], f[3]}.

В этом случае вы можете использовать Map[Sort, list]. Map также имеет инфиксный оператор, /@:

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 голосов
/ 20 ноября 2010

Может быть полезно знать, что упорядочение также будет работать

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]

Но для этого типа примера подход медленнее, чем Map / Sort

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

{0.175955,Null}

{1.02087, Null}

Порядок может быть полезен для сортировки по позиции

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

alt text

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...