您可以将conditional expression与for循环一起使用,在运行的total/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是一个错误的值。在
您还可以检查least significant bit,if ele & 1,如果为True,则表示该数字为奇数,或者{}来查找偶数:
^{pr2}$
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