[英]Python: How to return a list without modifying the original list using a while loop only?
假設我有一個名為everything的函數,該函數將一個列表作為其參數,並從索引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
如果需要使用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循環可能是最糟糕的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.