2012-05-23 120 views
0

我是Python新手,我正在通過閱讀「Head first Python」一書來學習它。當我嘗試打印嵌套列表時出現錯誤:

而我的疑問是,當我要打印嵌套列表,如圖書中

電影=「聖盃」,1975年我沒有得到正確的輸出, 「特里·瓊斯&特里·吉列姆」,91,[ 「格雷厄姆·查普曼」,[ 「邁克爾·佩林」, 「約翰·克里斯」, 「特里·吉列姆」, 「埃裏克空閒」, 「特里·瓊斯」]]]

- (在書中給出的代碼)

>>> for each_item in movies: 
if isinstance(each_item, list): 
    for nested_item in each_item: 
     if isinstance(nested_item, list): 
      for deeper_item in nested_item: 
       print(deeper_item) 
     else: 
      print(nested_item) 
else: 
    print(each_item) 

- (在書中輸出)

The Holy Grail 
1975 
Terry Jones & Terry Gilliam 
91 
Graham Chapman 
Michael Palin 
John Cleese 
Terry Gilliam 
Eric Idle 
Terry Jones 

- (但我得到下面的輸出只)

Graham Chapman 
Michael Palin 
John Cleese 
Terry Gilliam 
Eric Idle 
Terry Jones 
['Graham Chapman', ['Michael Palin', 'John Cleese', 'Terry Gilliam', 'Eric Idle', 'Terry Jones']] 

-

請幫幫我,我有t我可以想到的一切。提前致謝。

+2

即使你不知道這是「列表展平」,這是學習Python的一個非常普遍的問題。奇怪的是,似乎只是出現在新手問題上;在教程之外,如果你不想要嵌套列表,爲什麼你要製作一個? – msw

+1

我還沒有看到你提到的那本書,但我從來沒有必須永遠使用'isinstance',並且對於那些在Java中甚至沒有意義的反模式的新手都深感懷疑。 – msw

回答

1

由於縮進錯誤,所示代碼不會運行。第一個if語句應該縮進。 (如果你得到了你所顯示的結果,你可能會剪切並粘貼它,而無需調整本網站的縮進)。

movies = ["The Holy Grail", 1975, "Terry Jones & Terry Gilliam", 91, ["Graham Chapman", ["Michael Palin", "John Cleese", "Terry Gilliam", "Eric Idle", "Terry Jones"]]] 

for each_item in movies: 
    if isinstance(each_item, list): 
     for nested_item in each_item: 
      if isinstance(nested_item, list): 
       for deeper_item in nested_item: 
        print(deeper_item) 
      else: 
       print(nested_item) 
    else: 
     print(each_item) 

在Python提示符後粘貼時適用於我。你的輸出是你在最後兩行縮進4個空格時得到的結果。

print(nested_item)也僅縮進3個空格,其餘(縮進時)使用4個空格。

+1

確切的縮進增加對於語法來說並不重要,只要它增加即可。 –

+2

@Ignacio:一致性是恕我直言的重要。 – Anthon

0

最後的else是錯誤的。它必須與第一個if相同,而不是第一個for

0

我通過使用你的代碼得到你想要的。請檢查縮進。

for item in movies: 
    if isinstance(item,list): 
     for nested_item in item: 
      if isinstance(nested_item,list): 
       for deep_item in nitem: 
        print deep_item 
      else: 
       print nested_item 
    else: 
     print item 
0

爲我工作得很好:)

movies = ["The Holy Grail", 1975, "Terry Jones & Terry Gilliam", 91, ["Graham Chapman", ["Michael Palin", "John Cleese", "Terry Gilliam", "Eric Idle", "Terry Jones"]]] 

for each_item in movies: 
    if isinstance(each_item, list): 
     for nested_item in each_item: 
      if isinstance(nested_item, list): 
       for deeper_item in nested_item: 
        print(deeper_item) 
      else: 
       print(nested_item) 
    else: 
     print(each_item) 

我看不出有任何理由爲什麼它會產生那種輸出的爲您服務。你是直接輸入口譯員的嗎?也許最初的名單被搞亂了。試着將這些代碼應用到IDLE中,看看有沒有什麼奇怪的事情發生。

+0

我可以看到一個原因。 –

+0

是的,在閱讀你的答案後,我很肯定我反思性地糾正了縮進! >< – machow

+0

我複製了這段代碼,它對我來說工作正常。感謝您的回覆:) – iFido2020

相關問題