Как преобразовать список {element,...} в список кортежей {{i,element},...}?

Дан некоторый список

numbers = {2,3,5,7,11,13};

Как перевести его в

translatedNumbers = {{1,2},{2,3},{3,5},{4,7},{5,11},{6,13}}

сжатый вид?

Я знаю, как это сделать, используя процедурный стиль программирования следующим образом:

Module[{lst = {}, numbers = {2, 3, 5, 7, 11, 13}},
  Do[AppendTo[lst, {i, numbers[[i]]}], {i, 1, Length@numbers}]; lst]

Но это довольно многословно для того, что кажется мне простой операцией. Например, на языке haskell это выглядит так

numbers = zip [1..] [2,3,5,7,11,13]

Я не могу отделаться от мысли, что существует более лаконичный способ "индексирования" списка чисел в Mathematica.

Потенциальный ответ

Очевидно, мне не разрешается отвечать на свой собственный вопрос после того, как у меня сработала лампочка, если у меня нет 100 "rep". Поэтому я просто помещу свой ответ здесь. Дайте мне знать, если я должен сделать что-то по-другому, чем я сделал.

Ну, я чувствую себя немного глупо после того, как задал этот вопрос. Ведь если я рассматриваю списки Mathematica как матрицу, я могу транспонировать их. Таким образом, ответ (возможно, не самый лучший) на мой вопрос таков:

Transpose[{Range@6, {2, 3, 5, 7, 11, 13}}]

Отредактированный для работы с произвольными входными списками, я думаю, что-то вроде:

With[{lst={2, 3, 5, 7, 11, 13}},Transpose[{Range@Length@lst,lst}]]

будет работать. Могу ли я сделать что-нибудь лучше?

7
задан nixeagle 9 December 2011 в 22:25
поделиться