Дан некоторый список
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}]]
будет работать. Могу ли я сделать что-нибудь лучше?