在我正在制作的作业集中,我遇到了以下问题,我在使用Python-3函数时遇到了问题:
"写一个函数alternate:int list - >取一个列表的int 数字并用交替的符号添加它们。例如替代 [1,2,3,4] = 1 - 2 + 3 - 4 = -2。"
完全披露,问题是用标准ML编写的,但我一直在尝试学习Python并遇到了问题。我想象它涉及以下几种组合:
拆分列表,
if [i] % 2 == 0:
然后连接备用加号和减号。
答案 0 :(得分:8)
def alternate(l):
return sum(l[::2]) - sum(l[1::2])
获取所有偶数索引元素的总和,并减去所有奇数索引元素的总和。空列表总和为0
,因此它同时处理长度为0或1的列表,而没有专门针对这些情况的代码。
参考文献:
答案 1 :(得分:3)
因为你正在学习Python,所以不使用花哨的模块或操作符。
>>> mylist = range(2,20,3)
>>> mylist
[2, 5, 8, 11, 14, 17]
>>> sum(item if i%2 else -1*item for i,item in enumerate(mylist, 1))
-9
>>>
它如何运作?
>>> mylist = range(2,20,3)
>>> mylist
[2, 5, 8, 11, 14, 17]
enumerate(mylist, 1)
- 返回列表中的每个项目及其从1
如果索引是奇数,则添加项目。如果索引是偶数,则添加项目的负数。
if i%2:
return item
else:
return -1*item
使用sum
bulitin添加所有内容。
>>> sum(item if i%2 else -1*item for i,item in enumerate(mylist, 1))
-9
>>>
答案 2 :(得分:1)
以下是使用void food() {
if (foodx == snakeheadX && foody == snakeheadY) {
int new_foodx;
int new_foody;
do
{
new_foodx = rand() % (map_width - 3) + 1;
new_foody = rand() % (map_height - 1) + 1;
} while (new_foodx == foodx && new_foody == foody);
foodx = new_foodx;
foody = new_foody;
}
}
模块的一种方法:
operator
答案 3 :(得分:1)
虽然这已经有了一个公认的答案,但我觉得提供一个不是单行的解决方案会更好。
def alt_sum(lst):
total = 0
for i, value in enumerate(lst):
# checks if current index is odd or even
# if even then add, if odd then subtract
if i % 2 == 0:
total += value
else:
total -= value
return total
>>> alt_sum([1, 2, 3, 4])
-2
答案 4 :(得分:1)
my_list = range(3, 20, 2)
sum(item * ((-1)**index) for index, item in enumerate(my_list))
sum = 11(3-5 + 7-9 + 11-13 + 15-17 + 19的结果)
答案 5 :(得分:1)
您可以尝试以下列表理解:
sum([-e if c%2 else e for c,e in enumerate(yourlistylist)])
答案 6 :(得分:0)
您可以使用cycle from itertools交替+/-
>>> from itertools import cycle
>>> data = [*range(1, 5)]
>>> sum(i * s for i, s in zip(data, cycle([1, -1])))
-2