簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM