如何摆动列表中的数字?

How can I oscillate numbers in a list?

问题:我怎样才能让这些振荡,使得第一个数字或表达式是 + 下一个是 - 后面的是 + 等等下面提供的列表(不使用特制函数用于振荡,如果存在的话)。

我目前得到的输出如下所示:

    x + x^3/6 + x^5/120 + x^7/5040 + x^9/362880  
1. {1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49, 53, 57, 61, 65, 69,
73, 77, 81, 85, 89}

预期输出:

x - x^3/6 + x^5/120 - x^7/5040 + x^9/362880  
2. {1, -5, 9, -13, 17, -21, 25, -29, 33, -37, 41, -45, 49, -53, 57, -61, 65, -69, 73, -77, 81, -85, 89}

Sum[x^j/Factorial[j], {j, 1, 9, 2}];
myOsc = Table[i, {i, 1, 89, 4}];
Sum[If[OddQ[(j - 1)/2], -x^j, x^j]/Factorial[j], {j, 1, 9, 2}]

x - x^3/6 + x^5/120 - x^7/5040 + x^9/362880

myOsc = Table[If[OddQ[(i - 1)/4], -i, i], {i, 1, 89, 4}]

{1, -5, 9, -13, 17, -21, 25, -29, 33, -37, 41, -45, 49, -53, 57, -61, 65, -69, 73, -77, 81, -85, 89}

s = -1; Map[(s *= -1) # &, x + x^3/6 + x^5/120 + x^7/5040 + x^9/362880]

x - x^3/6 + x^5/120 - x^7/5040 + x^9/362880

注意事项 Mathematica 会首先为您按规范顺序排列您的表达式。例如,如果您这样输入:

s = -1; Map[(s *= -1) # &,x^3/6 + x  + x^5/120 + x^7/5040 + x^9/362880]

你得到相同的结果

x - x^3/6 + x^5/120 - x^7/5040 + x^9/362880

不需要额外 s 变量的小改进:

MapIndexed[(-1)^(1 + #2[[1]])*#1 &, x + x^3/6 + x^5/120 + x^7/5040 + x^9/362880]

x - x^3/6 + x^5/120 - x^7/5040 + x^9/362880