我有一个奇数列表但我仍然需要添加它们:
for n in range(100, 200):
if n % 2 == 1:
print sum([n])
Run Code Online (Sandbox Code Playgroud)
sbe*_*rry 10
如果您想要将100到200范围内的奇数相加,那么最直接的方法是:
sum(range(101, 200, 2))
Run Code Online (Sandbox Code Playgroud)
从101(奇数)开始,一直到199(奇数)并递增2,这样每个数字都是奇数.例如,
>>> range(101, 110)
[101, 102, 103, 104, 105, 106, 107, 108, 109]
Run Code Online (Sandbox Code Playgroud)
然后你可以总结它们.
如果您有一个预先存在的数字列表,那么以下两种方法中的任何一种都应该符合您的需要:
>>> 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
Run Code Online (Sandbox Code Playgroud)
这可能是你想要做的:
>>> total = 0
>>> for num in nums:
... if num % 2:
... total += num
...
>>> total
62
Run Code Online (Sandbox Code Playgroud)
从1到N(包括)的所有数字的总和是N*(N + 1)/ 2.
def sum_all(N):
return N * (N + 1) // 2
Run Code Online (Sandbox Code Playgroud)
从1到N(包括)的所有偶数之和是从1到N // 2的所有数字之和的两倍.
def sum_even(N):
return sum_all(N // 2) * 2
Run Code Online (Sandbox Code Playgroud)
从1到N(包括)的所有奇数的总和是这些的差.
def sum_odd(N):
return sum_all(N) - sum_even(N)
Run Code Online (Sandbox Code Playgroud)
最后,a和b之间的所有奇数之和是从1到b的所有奇数之和减去从1到a-1的所有奇数之和.
def sum_odd_range(a, b):
return sum_odd(b) - sum_odd(a - 1)
Run Code Online (Sandbox Code Playgroud)
回答原来的问题:
print sum_odd_range(100, 199)
Run Code Online (Sandbox Code Playgroud)
请注意,与使用sum()的解决方案不同,这些是O(1),对于较大的输入,任意速度会快.
| 归档时间: |
|
| 查看次数: |
29032 次 |
| 最近记录: |