编写一个在列表索引之间交替加号和减号的函数

时间:2016-12-27 05:56:01

标签: python list python-3.x

在我正在制作的作业集中,我遇到了以下问题,我在使用Python-3函数时遇到了问题:

  

"写一个函数alternate:int list - >取一个列表的int   数字并用交替的符号添加它们。例如替代   [1,2,3,4] = 1 - 2 + 3 - 4 = -2。"

完全披露,问题是用标准ML编写的,但我一直在尝试学习Python并遇到了问题。我想象它涉及以下几种组合:

拆分列表,

if [i] % 2 == 0:

然后连接备用加号和减号。

7 个答案:

答案 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