1

假设我有一个名为 everythird 的函数,它以一个列表作为其参数并返回一个新列表,其中包含原始列表的每三个元素,从索引 0 开始。我知道如何使用切片表示法执行此操作(返回 everythird[0::3 ]),但我们只能使用 while 循环。如果我输入 everythird([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
4

1 回答 1

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 循环可能是最糟糕的方法。

于 2013-06-16T01:22:15.453 回答