从一系列数字中取出并制作一个新数字

时间:2016-05-29 17:49:47

标签: python python-3.x

问题在于:

给定一个整数列表,使其成为第一个和最后一个整数,并且该结果将是新列表的第一个整数,添加第二个和倒数第二个整数,结果将是新列表的第二个整数,依此类推。如果您的列表是奇数,请将中心号码保留在原始列表中。

我遇到的两个问题。我不知道如何让我的代码在获取第一个和最后一个值的同时继续迭代,将其添加到新列表中,然后以中间方式工作。如果它是奇数,我如何让它迭代并停在中间值?

到目前为止,这是我的代码:

myList = [1,2,3,4,5,6]
newList = []

def switch(myList):
    for i in range(len(myList)):
        if len(myList) % 2 == 0:
            firstPart = newList+myList[0:+1]
            secondPart = myList[len(myList)-1:len(myList)+1]
            thirdPart = firstPart + secondPart
            return thirdPart
        else:
            if len(myList) % 2 == 1:

3 个答案:

答案 0 :(得分:4)

更新:在完成所有压缩,求和,映射,切片和反转之后,这个解决方案让我感到非常简单,实际上:

def switch(my_list):
    new_list = my_list[:]  # make a copy not to harm the original
    for i in range(len(my_list)//2):   # at the appropriate index ...
        new_list[i] += new_list.pop()  # ... add the element popped from the end
    return new_list

>>> switch([1,1,1,1])
[2, 2]
>>> switch([1,1,1,1,1])
[2, 2, 1]

答案 1 :(得分:0)

def switch(a_list):
    N = len(a_list)
    HALF = N//2

    new_list = []
    for i in range(HALF):
        j = N-i-1
        new_list.append(a_list[i] + a_list[j])
    if N % 2:
        new_list.append(a_list[HALF])

    return new_list

print(switch([1,2,3,4,5,6]))    # -> [7, 7, 7]
print(switch([1,2,3,4,5,6,7]))  # -> [8, 8, 8, 4]

答案 2 :(得分:-1)

import itertools
n=len(myList)
new_list=[e+f for e, f in itertools.izip(myList[:n/2], reversed(myList)[:n/2])]

myList [:n / 2]提取列表的第一部分[1,2,3]
reverse(myList)反转初始列表[6,5,4,3,2,1]然后使用[:n / 2]截断

然后可以使用izip在同一时间迭代这两个列表,这样可以轻松地执行您想要的操作:

e,f in itertools.izip([1,2,3],[6,5,4])=> e,f =(1,6),然后是(2,5),然后是(3,4)

在奇数长度的情况下,我添加一个特殊情况:

if len(myList)%2==1:
    new_list.append(myList[n/2+1])