2012-05-23 45 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

相关问题