2017-01-27 47 views
1

我對Python比較陌生,並被告知創建一個使用列表理解的列表,只顯示0-100之間的偶數,然後將所有這些數字加在一起。我明白如何做到這一點,如果它只是一個常規名單,如:列表理解然後與for循環求和

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循環和理解列表。

+4

將它包裝成'sum()'(它彙總了一個集合的所有值) – yedpodtrzitko

+0

應該沒有任何區別。將第一個例子中的範圍替換爲理解。 – Carcigenicate

回答

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 
+0

是的,它必須在for循環;我忘了提到這一點。這是令我困惑的部分。 – John

+0

'[x for x in range(0,101,2)]'只是'range(0,101,2)',對不對? –

+0

@EricDuminil後者返回一個生成器,同樣也是前者的懶惰等價物。如果你迭代他們,你會得到相同的輸出。 – Tagc

1

總和

望着這answer

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

並理解

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 
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)) 
0

你的第一個例子是正確的。 range和理解產生的列表都是可迭代的,所以它們都在for循環中工作。只是修真更換範圍:

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

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

print(Total) 
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)) 

祝你的家庭作業。