Python中嵌套list的遍历

嵌套list的遍历

一、双重嵌套list的遍历

#coding=utf-8 
listA = ['today','is','thursday']
listB = ['today','is','fine','day','!']
list1 = [listA,'恩哼?',listB]
for i in list1:
  if isinstance(i, list): #查看list元素是不是list
    for j in i:  #遍历嵌套的list
      print j,
  else :
    print i,
执行结果:
today is thursday 恩哼? today is fine day !


因为list中能够存放多种数据类型的数据,如tuple、dict、list、int、string、复数等类型,因此有时遍历list时,再使用上面的遍历方法就得不到咱们想要的结果,这个时候就必须针对不一样的数据类型进行不一样的处理。

二、一个list中多层嵌套list或者tuple(元组)或字典(dict)等的遍历
#coding=utf-8
def printList(list1):
  for elements in list1:
    if isinstance(elements,list) or isinstance(elements, tuple): 
      printList(elements) #递归调用函数自己进行深层次的遍历
    elif isinstance(elements, dict):
      for i in elements.items():
        print i,
    else :
      print elements,
list1 = [{"name":"jack",1:2},[[3.4j,["this","is","the","list"],(1,2,"adf")],3,4],'a','b',('a',"cc",'d'),1,{"name":"jack",1:2}]
printList(list1)
该题的基本思路就是先判断list中每个元素具体是什么类型,若是是list或者是tuple,就采用递归算法往深进行一层一层的遍历,直到list中的元素为常规类型时,就打印输出,因为dict类型中的键值key必须惟一,因此只能是不可变类型数据,因此这里不存在深层遍历dict键值的问题。

执行结果:
(1, 2) ('name', 'jack') 3.4j this is the list 1 2 adf 3 4 a b a cc d 1 (1, 2) ('name', 'jack')

三、list中,奇数位加1,偶数为加2
#coding=utf-8 
listA = [1,'a',2,'b',3,'c',4,'d',5,'e']
for i in range(len(listA)):
  if (i + 1) % 2 == 0:
    if isinstance(listA[i], str):#判断字符的类型,由于不一样类型没法直接加操做
      listA[i] += str(2)
    else :
      listA[i] += 2
  else :
    if isinstance(listA[i],str):
      listA[i] += str(1)
    else :
      listA[i] += 1
print listA

执行结果:
[2, 'a2', 3, 'b2', 4, 'c2', 5, 'd2', 6, 'e2']