遍历 list 嵌套

嵌套list的遍历
1、双重嵌套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时,再使用上面的遍历方法就得不到我们想要的结果,这个时候就必须针对不同的数据类型进行不同的处理。

2、一个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’)

3、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']

遍历嵌套dict tuple list :

def printList(listx):
    for i in listx:
        if isinstance(i,list) or isinstance(i,tuple):
            printList(i)
        elif isinstance(i,dict):
            printList(i.values())
        else:
            print(i)

转自:https://blog.csdn.net/seetheworld518/article/details/46756355

posted @ 2018-08-02 22:44  天雨流芳=.=  阅读(687)  评论(0编辑  收藏  举报