gpt4 book ai didi

wolfram-mathematica - 如何将列表 {element,...} 转换为元组列表 {{i,element},...}?

转载 作者:行者123 更新时间:2023-12-04 10:20:42 25 4
gpt4 key购买 nike

给出一些列表

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 个“代表”,否则我不允许在灯泡熄灭后回答我自己的问题。所以我只是把我的答案放在这里。如果我应该做一些与我已经做的不同的事情,请告诉我。

好吧,在问过这个问题后,我现在感觉有点傻。因为如果我将 mathematica 列表视为矩阵,我就可以转置它们。因此,我的问题的答案(可能不是最好的)如下:
Transpose[{Range@6, {2, 3, 5, 7, 11, 13}}]

编辑为适用于任意输入列表,我认为是这样的:
With[{lst={2, 3, 5, 7, 11, 13}},Transpose[{Range@Length@lst,lst}]]

将工作。我还能做得更好吗?

最佳答案

需要考虑的一件事是转换是否不会解压缩数据。这对于大型数据集很重要。

On["Packing"]

numbers = Developer`ToPackedArray@{2, 3, 5, 7, 11, 13};

这将解压
MapIndexed[{First[#2], #1} &, numbers]

这不会
Transpose[{Range[Length[#]], #}] &[numbers]

Off["Packing"]

关于wolfram-mathematica - 如何将列表 {element,...} 转换为元组列表 {{i,element},...}?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8450183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com