python每日一題:嵌套的列表轉換為簡單列表


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM