假设我有一个名为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
答案 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循环可能是最差的方法。