假设我有下一个清单:
factorial(3)
我想打印它并保存层次结构:
xl = [[[0,0], [-1,1], [-2,2]], [[-3,3], [-4, 4], [-5,5]]
层次结构可以是任何深度
我需要一些pythonic方式来打印并保持当前的迭代级别(不要手动管理缩进)。
进一步说明我的实际案例更复杂(迭代lxml实体)。我只需要一种方法来了解当前循环列表时的当前级别。
答案 0 :(得分:1)
def indent(thing, current_indentation=""):
print current_indentation + str(thing)
try:
for item in thing:
indent(item, " " * 4 + current_indentation)
except TypeError: # thing is not iterable
pass
xl = [[[0,0], [-1,1], [-2,2]], [[-3,3], [-4, 4], [-5,5]]]
indent(xl)
输出:
[[[0, 0], [-1, 1], [-2, 2]], [[-3, 3], [-4, 4], [-5, 5]]]
[[0, 0], [-1, 1], [-2, 2]]
[0, 0]
0
0
[-1, 1]
-1
1
[-2, 2]
-2
2
[[-3, 3], [-4, 4], [-5, 5]]
[-3, 3]
-3
3
[-4, 4]
-4
4
[-5, 5]
-5
5
关键是当你想编写代码来处理任意嵌套的循环时,你需要递归。
答案 1 :(得分:1)
我使用'isinstance'函数来确定输入日期类型是否为列表
def print_by_hierarchy(data,indentation):
if isinstance(data,list):
space = 2*indentation
for sub_data in data:
print(' '*space + str(sub_data))
print_by_hierarchy(sub_data,indentation +1)
else:
return
test_data = [[[0,0], [-1,1], [-2,2]], [[-3,3], [-4, 4], [-5,5]]]
print_by_hierarchy(test_data,0)
output:
[[0, 0], [-1, 1], [-2, 2]]
[0, 0]
0
0
[-1, 1]
-1
1
[-2, 2]
-2
2
[[-3, 3], [-4, 4], [-5, 5]]
[-3, 3]
-3
3
[-4, 4]
-4
4
[-5, 5]
-5
5