请循环解释python

时间:2013-08-02 13:00:41

标签: python

我是编程新手,但我已经学过Java,C ++,Javascript,PHP的教程,并且从未遇到类似这样的问题。 你能解释一下这段代码,特别是isinstance

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)

5 个答案:

答案 0 :(得分: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 :(得分: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);
        }
    }
}

答案 2 :(得分: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]是一个列表,因此它进入inner for循环。因此nested_item将采用值2,3。

答案 3 :(得分: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

你会收到一个错误,告诉你不能循环一个数字,因为它不是可迭代的。

答案 4 :(得分:0)

了解isinstance(each_item,list)需要了解以下两点:

  1. isinstance(A,B)回答了问题“是B的实例吗?”
  2. list是一种python类型(如dicttuplesetstrint),可以是使用了几种不同的方式:

    • 将事物转换为列表:

      • list("oink")#==> ['o','i','n','k'] 将字符串转换为字符列表
      • list((1,2,3))#==> [1,2,3] 将元组转换为列表
    • 帮助弄清楚事物的类型

      • type([1,2,3]) == list#==> True 发现某事物的类型
      • isinstance([1,2,3],list)#==>真