gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:09:15 24 4
gpt4 key购买 nike

假设我有一个名为 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

最佳答案

如果您需要使用 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 循环可能是最差的方法。

关于Python:如何仅使用 while 循环返回列表而不修改原始列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17129361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com