Wolfram mathematica 关于Mathematica中字符串操作的两个问题 给定一个字符或字符串s,生成一个重复n(整数)次的结果字符串s 给定一个字符或字符串列表及其出现频率列表(对应),生成一个结果字符串,其中列表中的每个字符串按照第二个列表中指定的所需时间重复,并将它们连接在一起。例如,给定{a”,“b”,“c”}和{1,0,3},我想要“accc”

Wolfram mathematica 关于Mathematica中字符串操作的两个问题 给定一个字符或字符串s,生成一个重复n(整数)次的结果字符串s 给定一个字符或字符串列表及其出现频率列表(对应),生成一个结果字符串,其中列表中的每个字符串按照第二个列表中指定的所需时间重复,并将它们连接在一起。例如,给定{a”,“b”,“c”}和{1,0,3},我想要“accc”,wolfram-mathematica,Wolfram Mathematica,我当然想用最有效的方法来做这些。否则,我自己的方式太丑陋和缓慢 谢谢你的帮助 rep[s_String, n_] := StringJoin[ConstantArray[s, n]] 然后 下一个 为1提供“accc”,表将执行您需要的操作 s = "samplestring"; StringJoin[Table[s, {3}]] "samplestringsamplestringsamplestring" 但是acl使用ContantArray的答案更快,如果你关心最后1/10

我当然想用最有效的方法来做这些。否则,我自己的方式太丑陋和缓慢

谢谢你的帮助

rep[s_String, n_] := StringJoin[ConstantArray[s, n]]
然后

下一个


为1提供“accc”

表将执行您需要的操作

s = "samplestring";

  StringJoin[Table[s, {3}]]

  "samplestringsamplestringsamplestring"
但是acl使用
ContantArray
的答案更快,如果你关心最后1/100秒的话

Do[StringJoin[Table[s, {30}]];, {10000}] // Timing

{0.05805, Null}

Do[StringJoin[ConstantArray[s, 30]];, {10000}] // Timing

{0.033306, Null}

Do[StringJoin[Table[s, {300}]];, {10000}] // Timing

{0.39411, Null}

Do[StringJoin[ConstantArray[s, 300]];, {10000}] // Timing

{0.163103, Null}
对于2,MapThread将处理第二个列表已知为非负整数的情况

StringJoin @ 
 MapThread[Table[#1, {#2}] &, {{"a", "b", "c"} , {1, 0, 3}}]

"accc"
如果第二个列表包含负整数,则将其视为零

第二个列表中的非整数元素被视为整数部分。我不确定这是否是你想要的

StringJoin @ 
 MapThread[Table[#1, {#2}] &, {{"a", "b", "c"} , {1, 0, 3.7}}]

"accc"
我建议使用
内部

sets = {{0, 0, 0, 4}, {0, 0, 1, 3}, {0, 1, 0, 3}, {0, 1, 1, 2}, {0, 2, 0, 2},
        {0, 2, 1, 1}, {1, 0, 0, 3}, {1, 0, 1, 2}, {1, 1, 0, 2}, {1, 1, 1, 1},
        {1, 2, 0, 1}, {1, 2, 1, 0}, {2, 0, 0, 2}, {2, 0, 1, 1}, {2, 1, 0, 1},
        {2, 1, 1, 0}, {2, 2, 0, 0}};

chars = {"a", "b", "c", "d"};

Inner[ConstantArray[#2, #] &, sets, chars, StringJoin]
{“dddd”、“cddd”、“bddd”、“bcdd”、“bbdd”、“bbcd”、“addd”、“acdd”,
“abdd”,“abcd”,“abbd”,“abbd”,“abbc”,“aadd”,“aacd”,“aabd”,“aabc”,“aabb”}相关问题:第二个问题是因为我回答了这个问题吗?我几乎把
MapThread
代码包括在那篇文章中,但我决定不写。是吗?巫师先生,正是你猜到的我在做
Nest[StringJoin[s,#]&,“,n]
,当然比内置的要慢@在此上下文中使用
Nest
类似于使用
AppendTo
构建列表,并导致解决方案具有类似的二次复杂性。这是速度缓慢的主要原因,而不是与内置程序本身的差异。这是一个缺陷,应该是
s_字符串
而不是
s_字符串
ConstantArray
如果您一次传递多个字符串,它会发疯的。@rcollyer谢谢,幸运的是我能先得到答案!(这个_uu确实是一个拼写错误,已修复,谢谢)是的,我花时间链接到相关文档,如果我没有,答案应该是我的!:P而且,我仍然认为我有超过5k的代表…:(
StringJoin @ 
 MapThread[Table[#1, {#2}] &, {{"a", "b", "c"} , {1, 0, 3.7}}]

"accc"
sets = {{0, 0, 0, 4}, {0, 0, 1, 3}, {0, 1, 0, 3}, {0, 1, 1, 2}, {0, 2, 0, 2},
        {0, 2, 1, 1}, {1, 0, 0, 3}, {1, 0, 1, 2}, {1, 1, 0, 2}, {1, 1, 1, 1},
        {1, 2, 0, 1}, {1, 2, 1, 0}, {2, 0, 0, 2}, {2, 0, 1, 1}, {2, 1, 0, 1},
        {2, 1, 1, 0}, {2, 2, 0, 0}};

chars = {"a", "b", "c", "d"};

Inner[ConstantArray[#2, #] &, sets, chars, StringJoin]
{"dddd", "cddd", "bddd", "bcdd", "bbdd", "bbcd", "addd", "acdd", "abdd", "abcd", "abbd", "abbc", "aadd", "aacd", "aabd", "aabc", "aabb"}