方法一:程序內容:
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)