2017-01-27 3 views
1

Я относительно новичок в Python и мне сказали создать список, используя понимание списка, чтобы отображать только цифры между 0-100, а затем добавить все эти числа вместе. Я понимаю, как это сделать, если это был просто обычный список, таких как:List Comprehensions then summing with for-loop

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 и список понятий.

+4

оберните его в 'sum()' (который суммирует все значения коллекции) – yedpodtrzitko

+0

Не должно быть никакой разницы.Замените «диапазон» в первом примере на понимание. – Carcigenicate

ответ

1

Чтобы сделать это с списковых:

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

Но вы можете просто сделать:

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

Выход в обоих случаях 2550.


Таким образом, очевидно ваши требования должны использовать переписку и a for loop? Я немного смущен, но вы просите об этом?

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

Да, он должен быть в петле; Я забыл упомянуть об этом. Это то, что меня смущает. – John

+0

'[x для x в диапазоне (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, и список, созданный пониманием, являются итерабельными, поэтому оба они работают в цикле. Просто замените диапазон с пониманием:

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

Удачи вам в выполнении домашнего задания.

Смежные вопросы