簡體   English   中英

Python:使用遞歸反向打印列表

[英]Python: Print a list in reverse using recursion

我試圖弄清楚如何使用遞歸以相反的順序打印出一個列表。 這就是我反轉列表的方式:

def reverse_list(xs):
    if xs == []:
         return xs
    else:
        new_list = (print_reverse (xs[1:])) + [xs[0]]
        return new_list

這就是我按順序打印列表的方式:

def print_in_order(l, i = 0):
    if i < len(l):
        print (l[i])
        print_in_order(l, i + 1)

我試過只是從函數內的新列表中打印出來,如下所示:

def print_reverse(xs):
    if xs == []:
        return xs
    else:
        new_list = (print_reverse (xs[1:])) + [xs[0]]
    for number in new_list: 
        print (number)

但這會引發錯誤。 您如何結合這兩個過程?

最簡單的方法之一就是以這種方式使用切片:

>>> example = [1, 2, 3, 4, 5]
>>> example[::-1]
[5, 4, 3, 2, 1]

..如果要打印它們,請執行以下操作:

>>> for number in example:
...     print(number)
...     
1
2
3
4
5

編輯:

>>> example = [1, 2, 3, 4, 5]

>>> def recursive(list, counter=0):
...     if len(list) > counter:
...         print(list[counter])
...         recursive(list, counter+1)
...     return
... 

>>> recursive(example[::-1])
5
4
3
2
1

您只需要交換兩行:

def print_in_reverse(lst, i=0):
    if i < len(lst):
        print_in_reverse(lst, i + 1)  # Do the recursive call before you
        print (lst[i])              # print instead of after

如果只想以相反的順序打印它,並且不想更改原始列表,則可以像這樣修改print_in_order()

#second parameter is length of list
def print_in_reversed(l, i): 
    if i > 0:
        print (l[i-1])
        print_in_order(l, i - 1)

您將通過此示例進行調用

example = [1,2,3,4,5]    
print_in_order(example, len(example))

這樣的事情( print_in_order適應):

# print l in reverse order, starting from i
# note, that we're allowed not to specify i
def print_in_reverse(l, i = None):
    # if i is not specified    
    if (i is None):
        i = len(l) - 1 

    # we're printing in reverse: 
    # we have to check for beginning of the string instead of ending
    # that's why check for 0 
    if (i >= 0):
        print (l[i])
        print_in_reverse(l, i - 1) # reverse direction: i - 1 instead of i + 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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