sum
can take a generator 89
90 exit('Type must be either linear, additive or multiplicative')
91
92 rmse = sqrt(sum([(m - n) ** 2 for m, n in zip(Y, y[:-1])]) / len(Y)) 93
94 return rmse
95
sum
can take a generator120 b.append(beta * (a[i + 1] - a[i]) + (1 - beta) * b[i])
121 y.append(a[i + 1] + b[i + 1])
122
123 rmse = sqrt(sum([(m - n) ** 2 for m, n in zip(Y[:-fc], y[:-fc - 1])]) / len(Y[:-fc]))124
125 return Y[-fc:], alpha, beta, rmse
126
sum
can take a generator153 s.append(gamma * (Y[i] - a[i] - b[i]) + (1 - gamma) * s[i])
154 y.append(a[i + 1] + b[i + 1] + s[i + 1])
155
156 rmse = sqrt(sum([(m - n) ** 2 for m, n in zip(Y[:-fc], y[:-fc - 1])]) / len(Y[:-fc]))157
158 return Y[-fc:], alpha, beta, gamma, rmse
159
sum
can take a generator186 s.append(gamma * (Y[i] / (a[i] + b[i])) + (1 - gamma) * s[i])
187 y.append((a[i + 1] + b[i + 1]) * s[i + 1])
188
189 rmse = sqrt(sum([(m - n) ** 2 for m, n in zip(Y[:-fc], y[:-fc - 1])]) / len(Y[:-fc]))190
191 return Y[-fc:], alpha, beta, gamma, rmse
tuple
can take a generator382 PYTHON_VERSION = python_version
383
384 if PYTHON_VERSION:
385 PYTHON_VERSION_INFO = tuple([int(i) if i.isdigit() else i for i in PYTHON_VERSION.split('.')])386 if platform.system() == 'Windows':
387 PREFIX = os.path.join(ROOT.lower(), '.python')
388 bin_venv = os.path.join(PREFIX, 'scripts')
The built-in function being used does not require comprehension and can work directly with a generator expression.
Using a generator expression within these functions is faster than using a comprehension:
all
any
enumerate
iter
itertools.cycle
itertools.accumulate
The inbuilt functions all()
and any()
in Python also support short-circuiting (evaluation stops as soon as the overall return value of the function is known), but this behavior is lost if you use a list comprehension. This affects performance.
# Takes a very long time to run
all_evens = all([n % 2 == 0 for n in range(100000000)])
if all_evens:
print('All numbers are even!')
# No list comprehension, runs instantly as `1` is found to be not even
all_evens = all(n % 2 == 0 for n in range(100000000))
if all_evens:
print('The numbers are all even!')