2013-08-02 110 views
-5

我是新手編程,但我已經在Java,C++,Javascript,PHP的教程,並從來沒有遇到過這樣的事情。 能否請您解釋一下這個代碼,尤其是isinstancepython for循環說明請

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) 
+6

在Python中,你需要縮進代碼,否則就沒有意義 – bennofs

+1

http://docs.python.org/3/library/functions.html#isinstance –

+0

你難道不明白哪一部分?請注意Python for for循環對於每個循環都是真的。也就是說,它們遍歷一個迭代器並讓你訪問該迭代器中的每個元素。 –

回答

0
for each_item in movies: #each_item will be each movie 
    if isinstance(each_item, list): #check if each_item is a list 
     for nested_item in each_item: #if so, then nested_item will be each item in each_item 
      if isinstance(nested_item, list): #check if nested_item is list 
       for deeper_item in nested_item: # if so, deeper_item will be each item in nested_list 
        print(deeper_item) #print out deeper_item 
      else: 
       print(nested_item) #print out nested_item 
    else: 
     print(each_item) #print out each_item 

所以,如果movies = [1,2,3],然後each_item將在循環值1,2,3。由於1,2,3不是列表,這些值只是打印出來。

如果是movies = [1,[2,3]],那麼each_item將在循環中取值1和[2,3]。由於[2,3]是一個列表,它進入內部for循環。所以nested_item將取值2,3。

3
# loop through each item in "movies" 
for each_item in movies: 

    # if the current item item is a list... 
    if isinstance(each_item, list): 

     # then loop through all the subitems... 
     for nested_item in each_item: 

      # and if yet again we meet a list... 
      if isinstance(nested_item, list): 

       # then loop through the items in this list 
       for deeper_item in nested_item: 
        # and print the 3rd level item 
        print(deeper_item) 

      # ... or print 2nd level item 
      else: 
       print(nested_item) 

    # or print the 1st level item 
    else: 
     print(each_item) 
1

如果你熟悉Java,你可以構建這樣一個幾乎相同的系列循環和檢查:

for (Object each_item: movies){ 
    if (each_item instanceof Collection){ 
     for (Object nested_item: each_item){ 
      if (nested_item instanceof Collection){ 
       for (Object deeper_item: nested_item){ 
        System.out.println(deeper_item); 
       } 
      } 
      else{ 
        System.out.println(nested_item); 
      } 
     else{ 
      System.out.println(each_item); 
     } 
    } 
} 
0

假設你的代碼是這樣的:

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) 

它看起來就像你在潛在的嵌套列表中打印每個項目一樣。如果對象(第一個參數)是類的實例(第二個參數),isinstance(object,classinfo)將返回true。因此,第一次調用isinstance時,您正在測試以查看each_item是否爲列表。如果它是一個列表,你可以循環訪問列表。

基本上,您正在查看列表中的第一個項目。如果它本身就是一個列表,你可以看看它中的第一個項目。如果該項目是一個列表,您可以查看其中的第一個項目。如果在任何時候您發現一個不是列表的項目,則會打印出該項目。

所以像這樣的列表:[1,2,[3,4,[5,6]]]將給出當前的代碼打印出

1 
2 
3 
4 
5 
6 

如果你只是做

list = [1, 2, [3, 4, [5, 6]]] 
for item in list: 
    print(item) 

將打印

1 
2 
[3, 4, [5, 6]]] 

如果你是做

list = [1, 2, [3, 4, [5, 6]]] 

for item in list: 
    for num in item: 
     for i in num: 
      print i 

,你會得到一個錯誤,告訴您不能循環使用一個數字,因爲它不是可迭代的。

0

瞭解isinstance(each_item,list)需要得到這兩個東西:

  1. isinstance(A,B)回答這個問題:「A是B的實例?「
  2. list是一個Python類型(如dicttuplesetstrint),並可以使用幾種不同的方法:

    • 的東西轉換成列表:

      • list("oink")#==> ['o','i','n','k'] 將字符串轉換爲字符列表
      • list((1,2,3))#==> [1,2,3] 轉換元組列表
    • 幫助找出事物的類型

      • type([1,2,3]) == list#==>真發現該類型的東西
      • isinstance([1,2,3],list)#==>真