列表理解然后用for循环求和

时间:2017-01-27 17:34:48

标签: python

我对Python比较陌生,并且被告知使用列表理解创建一个列表,只显示0-100之间的偶数,然后将所有这些数字加在一起。如果它只是一个常规列表,我明白该怎么做:

Total = 0
for x in range (0,101,2):
     Total += x

我不知道该怎么做才能理解。对我来说完全是无稽之谈。这就是我所拥有的。

Total = 0 
x = [x for x in range (1001) if x % 2 ==0]


Total +=int(???)
print('The total is:', Total)

我不知道该怎么办?或者即使我正确地走这条路。任何帮助都会很棒!

编辑:我忘了提到它需要在for循环中。我不知道如何创建for循环和理解列表。

5 个答案:

答案 0 :(得分:1)

用列表推导做到这一点:

print(sum([x for x in range(0,101,2)]))

但你可以这样做:

print(sum(range(0,101,2)))

两种情况下的输出都是2550。

所以显然你的要求是使用列表理解一个for循环?我有点困惑,但你要求这个吗?

even_terms = [x for x in range(0,101,2)]

total = 0
for x in even_terms:
    print(x)
    total += x

print('total:', total)

<强>输出

0
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
38
40
42
44
46
48
50
52
54
56
58
60
62
64
66
68
70
72
74
76
78
80
82
84
86
88
90
92
94
96
98
100
total: 2550

答案 1 :(得分:1)

看看这个answer

sum([x for x in range(101) if x%2 == 0])
#=> 2550

for and comprehension

total = 0
for even in [i for i in range(101) if i%2 == 0]:
     total += even
total
#=> 2550

直接公式

n = 100
(n/2)*(n/2+1)
#=> 2550

答案 2 :(得分:0)

Total = reduce( lambda x, y: x + y, filter( lambda n: n % 2 == 0, range( 0, 101 )  )

Total = reduce( lambda x, y: x + y, range( 0, 101, 2 ) )

答案 3 :(得分:0)

你的第一个例子是正确的。 range和理解产生的列表都是可迭代的,因此它们都在for循环中工作。只需用理解来替换范围:

xs = [x for x in range (1001) if x % 2 ==0]

Total = 0
for x in xs:
     Total += x

print(Total) 

答案 4 :(得分:0)

使用sum可能是在添加时迭代列表推导的规范方法。

def calculate_sum_over_range(start, end, interval=2):
    return sum(_ for _ in range(start, end, interval))

print(calculate_sum_over_range(0, 101))

祝你的家庭作业好运。