0

我有一个奇数列表,但我仍然需要添加它们:

for n in range(100, 200):
   if n % 2 == 1:
       print sum([n])
4

2 回答 2

10

如果您希望将 100 到 200 范围内的奇数相加,那么最直接的方法是:

sum(range(101, 200, 2))

从 101(奇数)开始,一直到 199(奇数)并以 2 递增,这样每个数字都是奇数。例如,

>>> range(101, 110)
[101, 102, 103, 104, 105, 106, 107, 108, 109]

然后你可以把它们加起来。

如果您有一个预先存在的数字列表,那么以下两种方法中的任何一种都应该适合您的需要:

>>> nums = [1, 2, 4, 5, 6, 9, 11, 15, 20, 21]
>>> sum(filter(lambda x: x % 2, nums))
62
>>> sum(num for num in nums if num % 2)
62

这可能是你想要做的:

>>> total = 0
>>> for num in nums:
...     if num % 2:
...          total += num
...
>>> total
62
于 2013-09-22T06:10:59.613 回答
5

从 1 到 N(含)所有数字的总和为 N * (N + 1) / 2。

def sum_all(N):
    return N * (N + 1) // 2

从 1 到 N(含)所有偶数的总和是从 1 到 N//2 的所有数字总和的两倍。

def sum_even(N):
    return sum_all(N // 2) * 2

从 1 到 N(含)所有奇数的总和就是它们的差。

def sum_odd(N):
    return sum_all(N) - sum_even(N)

最后,a 和 b 之间的所有奇数之和是从 1 到 b 的所有奇数之和减去从 1 到 a - 1 的所有奇数之和。

def sum_odd_range(a, b):
    return sum_odd(b) - sum_odd(a - 1)

要回答原始问题:

print sum_odd_range(100, 199)

请注意,与使用 sum() 的解决方案不同,这些是 O(1),并且对于较大的输入将任意更快。

于 2013-09-22T08:50:48.977 回答