我想编写一个代码来计算和求和任何正数和负数。
数字可以是正数或负数(不为零)。
我用for
循环编写了代码。有创意吗?
数据
[R
set.seed(100)
x <- round(rnorm(20, sd = 0.02), 3)
Pythonx = [-0.01, 0.003, -0.002, 0.018, 0.002, 0.006, -0.012, 0.014, -0.017, -0.007,
0.002, 0.002, -0.004, 0.015, 0.002, -0.001, -0.008, 0.01, -0.018, 0.046]
循环[R
sign_indicator <- ifelse(x > 0, 1,-1)
number_of_sequence <- rep(NA, 20)
n <- 1
for (i in 2:20) {
if (sign_indicator[i] == sign_indicator[i - 1]) {
n <- n + 1
} else{
n <- 1
}
number_of_sequence[i] <- n
}
number_of_sequence[1] <- 1
#############################
summation <- rep(NA, 20)
for (i in 1:20) {
summation[i] <- sum(x[i:(i + 1 - number_of_sequence[i])])
}
Pythonsign_indicator = [1 if i > 0 else -1 for i in X]
number_of_sequence = [1]
N = 1
for i in range(1, len(sign_indicator)):
if sign_indicator[i] == sign_indicator[i - 1]:
N += 1
else:
N = 1
number_of_sequence.append(N)
#############################
summation = []
for i in range(len(X)):
if number_of_sequence[i] == 1:
summation.append(X[i])
else:
summation.append(sum(X[(i + 1 - number_of_sequence[i]):(i + 1)]))
结果 x n_of_sequence sum
1 -0.010 1 -0.010
2 0.003 1 0.003
3 -0.002 1 -0.002
4 0.018 1 0.018
5 0.002 2 0.020
6 0.006 3 0.026
7 -0.012 1 -0.012
8 0.014 1 0.014
9 -0.017 1 -0.017
10 -0.007 2 -0.024
11 0.002 1 0.002
12 0.002 2 0.004
13 -0.004 1 -0.004
14 0.015 1 0.015
15 0.002 2 0.017
16 -0.001 1 -0.001
17 -0.008 2 -0.009
18 0.010 1 0.010
19 -0.018 1 -0.018
20 0.046 1 0.046
最佳答案
其他解决方案看起来还不错,但是您实际上不需要使用复杂的语言功能或库函数来解决此简单问题。
result, prev = [], None
for idx, cur in enumerate(x):
if not prev or (prev > 0) != (cur > 0):
n, summation = 1, cur
else:
n, summation = n + 1, summation + cur
result.append((idx, cur, n, summation))
prev = cur
如您所见,您实际上并不需要sign_indicator
列表,两个for循环或range
函数,如问题部分中的代码片段所示。如果您希望索引从1开始,请使用
enumerate(x, 1)
而不是enumerate(x)
要查看结果,可以运行以下代码for idx, num, length, summation in result:
print(f"{idx:>2d} {num:.3f} {length:>2d} {summation:.3f}")