shg104

导航

Python 之 复杂列表的处理

  python 中的列表(list)是可以嵌套的,如何处理嵌套列表中的数据就是一个必须面对的问题。

比如,像下面list_recur这样的列表就是嵌套列表:

list_recur= ['a','b', ['a1', 'b1', ['a11', 'b11',['a111', 'b111']]], 'c','d',['d1']]

示例:

 

import sys    # 导入系统模块
"""          # 三个引号表示多行注释
函数:print_list()
功能:
  打印列表中的数据项,如果子项是列表,则递归打印
参数:
  the_list:  列表

  indent:   是否开启嵌套打印时缩进显示,默认False表示不开启,即各级显示在同一列

  level:   控制缩进,如果level为正值,表示一行要增加多少个空格,如果为0,不缩进
  fh:     输出位置,默认为标准输出,即窗口,可以指定输出到文件中。  

"""

 

def print_list(the_list, indent=False, level=0, fh=sys.stdout):
  for item in the_list:
    if isinstance(item, list):         # 判断当前项是不是列表,如果是列表,递归操作
      print_list(item, indent, level+1, fh)    # 如果用++level会有问题
    else:                  # 如果是具体的项
      if indent:              # 如果开启缩进
        for tab_stop in range(level):   # 输出空格
          print(" ", end='', file=fh)
      print(item, file=fh)          # 函数调用,可以省略中间的默认参数

# 要处理的列表:

street = ['北京市', '上海市', '天津市', ['东城区', '黄浦区', '和平区', ['东大街20号','福州路166号', '南京路288号']], '重庆市','武汉市', ['江北区']]

# 调用:

 

print_list(street)

# 输出:

北京市
上海市
天津市
东城区
黄浦区
和平区
东大街20号
福州路166号
南京路288号
重庆市
武汉市
江北区

 

print_list(street, True)

# 输出:

北京市
上海市
天津市
  东城区
  黄浦区
  和平区
    东大街20号
    福州路166号
    南京路288号
重庆市
武汉市
  江北区

 

print_list(street, True, 1)

# 输出:

  北京市
  上海市
  天津市
    东城区
    黄浦区
    和平区
      东大街20号
      福州路166号
      南京路288号
  重庆市
  武汉市
    江北区

 

# 输出到文件

 try:

  with open('street.txt','w') as w_file:    # 打开文件,如果文件不存在,则创建
    print_list(street, True, fh=w_file)  
 # 输出到文件
except IOError as err:           #  异常处理
  print("File error: "+str(err));

 # 执行后文件中内容:

 

 

posted on 2017-03-31 11:07  shg104  阅读(786)  评论(0)    收藏  举报