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)