嵌套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