[英]Add even numbers, subtract uneven numbers in Python
我有一個創建for循環的任務,以添加偶數並從數字列表中減去不均勻數字。 像這樣的東西: list = [(6,(+8),(-95),(+2),(+12),(+152),(+4),(+78),(-621),(-45))]
我不確定從哪里開始,但我已經走了這么遠:
list = [6,8,95,2,12,152,4,78,621,45]
sum = 0
for x in list:
if list (0 % 2) == 0:
sum = sum + list[x]
elif list (0 % 2) != 0:
sum = sum - list[x]
return sum
雖然不確定如何遍歷列表...
不要將list
用作變量名,因為它會隱藏list
數據類型!
lst = [6, 8, 95, 2, 12, 152, 4, 78, 621, 45]
total = 0
for x in lst:
if x % 2: # odd
total -= x
else: # even
total += x
編輯:只是為了好玩,您也可以嘗試
total = sum(x * (1 - (x % 2 * 2)) for x in lst)
弄清楚它是如何工作的獎勵積分;-)
您可以將條件表達式與for循環一起使用,以在運行的合計/ sm中添加偶數並從中減去奇數:
lst = [6,8,95,2,12,152,4,78,621,45]
sm = 0
for ele in lst:
sm = sm + ele if not ele % 2 else sm - ele
if not ele % 2
對於偶數將為True,因為0
是一個假值。
您還可以檢查最低有效位( if ele & 1
(如果為True表示數字是奇數),或者if ele & 0
以查找偶數:
sm = 0
for ele in lst:
sm = sm - ele if ele & 1 else sm + ele
print(sm)
所有這些都可以放在生成器表達式中 :
print(sum(-ele if ele & 1 else ele for ele in lst))
sum
是一個內置函數,與list
因此請盡量避免將其中任一個用作變量名。
只是出於興趣一些時間:
In [8]: timeit sum(-x if x % 2 else x for x in lst)
1000000 loops, best of 3: 1.44 µs per loop
In [9]: %%timeit
sm = 0
for ele in lst:
sm = sm + ele if not ele % 2 else sm - ele
...:
1000000 loops, best of 3: 1.12 µs per loop
In [11]: timeit sum(-ele if ele & 1 else ele for ele in lst)
1000000 loops, best of 3: 1.27 µs per loop
In [13]: %%timeit
sm = 0
for ele in lst:
sm = sm + ele if not ele % 2 else sm - ele
....:
1000000 loops, best of 3: 1.11 µs per loop
In [14]: %%timeit
sm = 0
for ele in lst:
sm = sm - ele if ele & 1 else sm + ele
....:
1000000 loops, best of 3: 875 ns per loop
In [15]: %%timeit
....: total = 0
....: for x in lst:
....: if x % 2: # odd
....: total -= x
....: else: # even
....: total += x
1000000 loops, best of 3: 1.02 µs per loop
In [16]: timeit sum(x * (1 - (x % 2 * 2)) for x in lst)
100000 loops, best of 3: 2.2 µs per loop
使用+=
和-=
將總和相減。
num_list = [6,8,95,2,12,152,4,78,621,45]
sum = 0
for x in num_list:
if x % 2 == 0:
sum += x
else:
sum -= x
您實際上可以在一行中完成此操作,作為列表理解:
print sum([j * [1, -1][j % 2] for j in data])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.