python - 取列表的总和,但将奇数元素更改为负数
问题描述
编写一个函数alternating_sign_sum(nums),它将一个可能为空的数字nums列表作为参数并返回结果
nums[0] - nums[1] + nums[2] - nums[3] ... 即所有数字的总和,但所有奇数元素取反。如果列表为空,则返回值应为零。您的函数不应修改作为参数传递的列表。
def alternating_sign_sum(nums):
"""yo"""
lis = 0
for num in nums:
if num & 1 == 1:
num = num * -1
if num % 2 == 0:
num = num * 1
lis += num
return (lis)
解决方案
与您类似的简单的逐元素方法将使用一个在一个和负一个之间交替的乘数,如下所示:
def alternating_sign_sum(the_list):
the_sum = 0
the_mult = 1
for item in the_list:
the_sum = the_sum + the_mult * item
the_mult = -the_mult
return the_sum
然而,Pythonic的方法只是使用两个列表推导来完成,一个处理奇数元素索引,另一个处理偶数索引:
def alternating_sign_sum(the_list):
return sum(the_list[0::2]) - sum(the_list[1::2])
这是有效的,因为列表切片0::2
意味着从元素零(第一个元素)开始,消耗所有元素,但仅每隔一个。所以这是第一,第三,第五,等等。同样,1::2
表示第二个、第四个等等。
带有测试工具的最后一个版本如下:
def alternating_sign_sum(the_list):
return sum(the_list[0::2]) - sum(the_list[1::2])
print(alternating_sign_sum([]))
print(alternating_sign_sum([7]))
print(alternating_sign_sum([7, 2]))
print(alternating_sign_sum([1, 2, 3, 4]))
并按预期产生:
0
7
5
-2
推荐阅读
- python - 从 Python 中的 2 个数据框列创建二进制矩阵
- c# - 克隆锯齿状数组比多维数组慢
- python - 如何计算张量中的正值?
- windows - 浏览器如何找到 applicationHost.config 文件?
- c# - c# 如何在 UWP 中获取 HttpServer (IIS) 的目录
- python - 在 Python 中使用溢出错误作为条件?
- c++ - 在调试器中显示 ifstream 的当前文件夹
- angular - 在数组 angular 5 中添加两种不同类型的对象
- java - 地图中的多个标记未使用 SupportMapFragment 显示
- android - 如何在 chrome 自定义选项卡中实现 URL 更改侦听器?