方法一:程序内容:
1.定义一个judge(abc)函数,判定abc列表中的数据是否全是int,若是返回0,简单列表;否则,返回1
2.定义lister(abc),如果abc中的元素都为int,则直接添加到b列表中;如果abc中的元素i仍为list,则将其元素i中的子元素逐个插入到b中,
3.判断b中的元素是否为int,如果是,代表b是一个简单列表,返回b;否则,返回lister (b),递归调用
def judge(abc):###判断是否有列表嵌套,如果列表嵌套,返回1,如果列表中数据都为int,即简单列表,返回0 for i in abc: if isinstance(i, list): return 1 return 0 def lister(abc): b = [] for i in abc: if isinstance(i, list): b+=i else: b.append(i) if judge(b): return lister(b) else: return b a=[[[10,[[[[2,5],7],10],45],[5,45]],55,20],55,60] print(lister(a))
方法二:程序内容:
1. 定义一个全局空列表b,存储列表abc转化后的数据元素
2.定义lister(abc),如果abc中的元素i为int,则直接添加到b列表中,并删除abc中的元素i;如果abc中的元素i为list,则将其元素i的子元素合并到abc中,并删除i
3.判断len(abc),如果是0,表示转换完成,返回b;否则,返回lister (abc),递归调用
b = [] def lister(abc): for i in abc: if isinstance(i, list): abc=i+abc abc.remove(i) else: abc.remove(i) b.append(i) break if len(abc): lister(abc) return b a=[[[10,[[[[2,5],7],10],45],[5,45]],55,20],55,60] print(lister(a))
方法三:由于嵌套list的标志是使用了多个“[”,“]".程序的思想是将list转换为str,然后采用str相关函数去除"[","]",再转换为列表即可:
a=[[[10,[[[[2,5],7],10],45],[5,45]],55,20],55,60] b=str(a) #转换为字符串 b=b.replace('[','')#删除"[" b=b.replace(']','')#删除"]" c=[0]*100 i=0 j=b.find(',') while j>=0: c[i]=int(b[0:j])#将","前面的字符串转换为列表中的子数据 b=b[j+1:]#将","后面的字符赋值给b,即删除提取过的字符[0:j] j=b.find(',')#查找",",提取出在字符串中的字节位 i+=1 c[i]=int(b) print(c[:i+1])
调试后的结果如下:
[10, 2, 5, 7, 10, 45, 5, 45, 55, 20, 55, 60]
方法四:利用iterable 检测是否是可迭代类型。
# encoding: utf-8 from collections.abc import Iterable a = [[[10, [[[[2, 5], 7], 10], 45], [5, 45]], 55, 20], 55, 60] while 1: b = [] num = 1 for i in a: if isinstance(i, Iterable): # 检测含有可迭代类型,则将i中子元素添加到b,相当于去掉一个[] num = 0 for j in i: b.append(j) else: b.append(i) a = b # 赋值给a,继续检测是否含有可迭代类型 if num: # 逐一检测a,若num=1,标明a中没有可迭代类型,完成检测 break print(b)