这段代码只打印1 2 4 5 ..我的问题是为什么p在第3次迭代时没有用新数组更新
p = [1, 2, [1, 2, 3], 4, 5]
for each in p:
if type(each) == int:
print each
else:
p = each
Run Code Online (Sandbox Code Playgroud)
实际上,在调试代码时要确切地说,我看到它实际上更新了p的值但是each变量不会再次重新初始化.
因为if type(each) == int:线.你的第三个元素是list([1, 2, 3])而不是int,所以它不会打印任何东西.
现在改变p变量的方法p是:只是对象的名称,而不是对象本身.如果你p = each在for循环中执行,它不会影响你循环的原始对象,它只是将名称更改p为本地名称,该名称指向不同的对象.一旦循环结束,你的for循环就会继续与你循环的原始对象做生意.
因此,请注意,p = each不会更改现有对象(p您正在循环),它只是创建一个p指向值的新本地名称each.
你最想要的是这样的:
p = [1, 2, [1, 2, 3], 4, 5]
for each in p:
if isinstance(each, list):
for x in each:
print x
else:
print each
Run Code Online (Sandbox Code Playgroud)
这又一次,这不是递归的,你需要一个函数:
def print_elements(iterable):
for element in iterable:
if isinstance(element, list):
print_elements(element)
else:
print element
Run Code Online (Sandbox Code Playgroud)
如果要将值解压缩到一个列表中以将其用于打印以外的其他内容,则应使用以下内容:
def recursive_unpack(iterable):
for element in iterable:
if isinstance(element, list):
yield from recursive_unpack(element)
else:
yield element
Run Code Online (Sandbox Code Playgroud)
为什么我使用isinstance()而不是type():python中的isinstance()和type()之间的差异
此外,如果您希望将此应用于所有迭代(我的上一个示例)而不仅仅是列表:在Python中,如何确定对象是否可迭代?
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |