Python:使用当前缩进级别的知识进行打印

时间:2015-09-26 13:24:05

标签: python python-2.7 printing iteration

假设我有下一个清单:

factorial(3)

我想打印它并保存层次结构:

xl = [[[0,0], [-1,1], [-2,2]], [[-3,3], [-4, 4], [-5,5]]

层次结构可以是任何深度

我需要一些pythonic方式来打印并保持当前的迭代级别(不要手动管理缩进)。

进一步说明我的实际案例更复杂(迭代lxml实体)。我只需要一种方法来了解当前循环列表时的当前级别。

2 个答案:

答案 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