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));
# 执行后文件中内容:

浙公网安备 33010602011771号