我是编程新手,但我已经学过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)
答案 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)
需要了解以下两点:
isinstance(A,B)
回答了问题“是B的实例吗?” list
是一种python类型(如dict
,tuple
,set
,str
和int
),可以是使用了几种不同的方式:
将事物转换为列表:
list("oink")
#==> ['o','i','n','k'] 将字符串转换为字符列表 list((1,2,3))
#==> [1,2,3] 将元组转换为列表 帮助弄清楚事物的类型
type([1,2,3]) == list
#==> True 发现某事物的类型 isinstance([1,2,3],list)
#==>真