簡體   English   中英

列表功能異常

[英]List function acting unexpectedly

def print_list(l):
    for item in l:
        if isinstance(item, list):
            print_list(item)
        else:
            print(item)

我已經編寫了此函數,該函數使用遞歸來正確打印列表,但是我的問題是當我給它一個像[[1, 2, 3], 4]類的參數時[[1, 2, 3], 4]它應該在顯示3后終止,但仍然可以正確顯示這四個價值觀是什么原因,有人可以啟發我。

我認為您誤解了遞歸。

外部列表具有兩項,一項是列表,一項是數字print_list()函數再次調用print_list()來打印內部列表,然后為第二個元素調用print(4)

因此,將發生以下情況:

  1. print_list([[1, 2, 3], 4]) ->遍歷2個項目

    1. print_list([1, 2, 3]) ->遍歷3個項目

      1. print(1)
      2. print(2)
      3. print(3)

    2. print(4)

當我嘗試您的功能時,我得到

1
2
3
4

作為輸出。 這正是您所期望的,因為您的函數首先進入遞歸,並在[1, 2, 3]循環。 打印13 然后,遞歸完成,返回到原始調用,該調用將在外部列表中打印第二個元素,即4

您為什么期望程序在三點終止? 如果您說遞歸停止時輸出的是數字三,那么您是對的,但是此時原始列表仍未完全處理。 如果記下程序的步驟,則可能顯示如下:

  • 遍歷可迭代[[1,2,3],4]中的所有元素
  • 第一項[1、2、3]是列表嗎? ->是的
  • 呼叫帶有第一項的print_list
    • 遍歷[1、2、3]中的所有項目
    • 第一項是清單嗎? ->沒有
    • 打印1
    • 第二項2是清單嗎? ->沒有
    • 打印2
    • 第三項3是清單嗎? ->沒有
    • 打印3
    • 到達列表末尾,因此返回
  • 第二項4是清單嗎? ->沒有
  • 打印4

暫無
暫無

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

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