【发布时间】:2023-03-18 21:44:01
【问题描述】:
给定一些列表
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 个“代表”,否则我不允许在灯泡熄灭后回答我自己的问题。所以我就把我的答案放在这里。让我知道我是否应该做一些与我所做的不同的事情。
好吧,问完这个问题后,我现在感觉有点傻。因为如果我将数学列表视为矩阵,我就可以转置它们。因此,我的问题的答案(也许不是最好的)如下:
Transpose[{Range@6, {2, 3, 5, 7, 11, 13}}]
编辑为适用于任意输入列表,我认为是这样的:
With[{lst={2, 3, 5, 7, 11, 13}},Transpose[{Range@Length@lst,lst}]]
会起作用。我能做得更好吗?
【问题讨论】:
-
您的编辑看起来像是执行此操作的规范方式。
-
谢谢,事实证明,我最近已经超过了 100 个“代表”。我现在应该将自己的答案复制到问题答案并从问题正文中删除吗?特别是当我的答案反映(完全正确!)给出的两个答案时。 (另外我推迟选择一个答案作为问题的“答案”,希望有更多的选择。如果转置方法是最好的,我应该批准哪个答案?下面给出的两个答案之一或我的复制下来?)
-
这与所提出的问题无关,但我建议在几乎所有情况下都更喜欢
Module(或With)而不是Block,并且只有在你真的使用Block时才使用知道它的作用,以及为什么需要它。 -
不确定。我已经看到它是双向的。人们在问题框的底部或作为单独的答案进行总结和总结。您可能想阅读这个问题的答案:meta.stackexchange.com/q/2800/158668
-
你当然不应该太早接受答案。它会阻止人们尝试自己的解决方案。通常几天就可以了。