【发布时间】:2017-12-22 04:03:58
【问题描述】:
我正在尝试使用列表推导来替换这个 for 循环。我的清单是
test_list = [3, 4, 6, 3, 8, 4, 7, 8, 12, 14, 1, 6, 7, 3, 7, 8, 3, 3, 7]
功能是
import numpy as np
def ema(x, n):
x = np.array(x)
emaint = np.zeros(len(x))
k = 2 / float(n + 1)
emaint[0:n] = np.average(x[:n])
for i in range(n, len(x)):
emaint[i] = (x[i] * k) + (emaint[i - 1] * (1 - k))
return emaint
如果我调用 ema(test_list, 5) 的结果将是
[4.8 4.8 4.8 4.8 4.8 4.53333333 5.35555556 6.23703704 8.15802469 10.10534979 7.0702332 6.7134888 6.80899253 5.53932835 6.0262189 6.68414594 5.45609729 4.63739819 5.42493213]
我试过了
import numpy as np
def ema_compr(x, n):
x = np.array(x)
emaint = np.zeros(len(x))
k = 2 / float(n + 1)
emaint[0:n] = np.average(x[:n])
emaint[n:] = [(x[i] * k) + (emaint[i - 1] * (1 - k)) for i in range(n, len(x))]
return emaint
但是,如果我调用 ema_compr(test_list, 5),结果会有所不同:
[4.8 4.8 4.8 4.8 4.8 4.53333333 2.33333333 2.66666667 4. 4.66666667 0.33333333 2. 2.33333333 1. 2.33333333 2.66666667 1. 1. 2.33333333]
- 我想知道是否可以理解列表。
- 列表理解的结果是否不同,因为我要访问非创建的元素?
【问题讨论】:
-
x 和 n 的值是多少。我认为 x 是“test_list”。 n呢?
-
他在他的问题中说
ema_compr(test_list, 5)的结果是什么。
标签: python list list-comprehension