Python:如何仅使用while循环返回列表而不修改原始列表?

时间:2013-06-16 01:18:00

标签: python list python-3.x while-loop

假设我有一个名为everythird的函数,它以列表作为参数,并从索引0开始返回包含原始列表的每个第三个元素的新列表。 我知道如何使用切片表示法(返回everythird [0 :: 3]),但我们只能使用while循环。如果我输入每一个([1,2,3,4,5,6,7,8]),我希望它返回[1,4,7]。我尝试了几种不同的方式,但我没有得到一个列表,或者我只得到一个值。如何退回清单?另外,您如何确定某些内容是修改还是不修改原始列表?

谢谢。

这是我试图解决的方法之一: every_third([1,2,3,4,5,6,7,8,9,10,11])

def everythird(l):
    '''(list) -> list
    Returns every third element of original list, starting at index 0'''

    i = 0
    while i < len(l):
        print(l[i])
        i += 3

打印

1
4
7

1 个答案:

答案 0 :(得分:5)

如果你需要使用while循环执行此操作,可以通过将每个元素附加到列表而不是打印它,然后返回该列表来实现:

def everythird(l):
    i = 0
    ret = []
    while i < len(l):
        ret.append(l[i])
        i += 3
    return ret

虽然你注意到,但肯定最好这样做

def everythird(l):
    return l[0::3]

或者,如果您被允许使用for循环:

def everythird(l):
    ret = []
    for i in range(0, len(l), 3):
        ret.append(l[i])
    return ret

最后,如果你被允许使用列表理解:

def everythird(l):
    return [l[i] for i in range(0, len(l), 3)]

切片索引肯定是最好的,但无论如何,while循环可能是最差的方法。