在网上查找很多关于python对两个列表数据比对,比如set方式,cmp方式,或者合并差等方式,都无法达到我实际想要,往上各种方式,大多都没考虑列表中有重复数据和列表有序的问题,特根据项目需要写了如下代码,仅供自己项目中使用:
代码说明:
按列表的序列,依次比对,包括数据的类型都会做比较
#encoding=utf-8
a=[1,2,3,4,5,6,7,8,9,10]
c=[1,2,3,4,5,6,8,7]
b=[1,22,'3',4,5,6,7,8]
#print(a[2:-2])
def List_Cp_List(list1,list2):
if list1==list2:
return {"status": True, "message": [u"两个列表中数据一致!"]}
elif len(list1)==len(list2):
msg=[]
for i in range(len(list1)):
if list1[i]!=list2[i]:
if type(list1[i])!=type(list2[i]) and str(list1[i])==str(list2[i]):
msg.append(u"表I中第%s位元素【%s】的数据类型【%s】!=表II中第%s位【%s】的数据类型【%s】" % (
i + 1, list1[i], type(list1[i]), i + 1,list2[i],type(list2[i])))
else:
msg.append(u"表I中第%s位元素【%s】!=表II中第%s位【%s】"%(i+1,list1[i],i+1,list2[i]))
return {"status": False, "message": msg}
elif len(list1)>len(list2):
msg=[]
for i in range(len(list2)):
if list1[i]!=list2[i]:
if type(list1[i]) != type(list2[i]) and str(list1[i]) == str(list2[i]):
msg.append(u"表I中第%s位元素【%s】的数据类型【%s】!=表II中第%s位【%s】的数据类型【%s】" % (
i + 1, list1[i], type(list1[i]), i + 1, list2[i], type(list2[i])))
else:
msg.append(u"表I中第%s位元素【%s】!=表II中第%d位【%s】"%(i+1,list1[i],i+1,list2[i]))
for i in range(len(list2),len(list1)):
msg.append(u"表I中第%s位元素【%s】不在表II中" % (i+1,list1[i]))
return {"status": False, "message": msg}
else:
msg=[]
for i in range(len(list1)):
if list1[i]!=list2[i]:
if type(list1[i]) != type(list2[i]) and str(list1[i]) == str(list2[i]):
msg.append(u"表I中第%s位元素【%s】的数据类型【%s】!=表II中第%s位【%s】的数据类型【%s】"%(i+1,list1[i],type(list1[i]),i+1,list2[i],type(list2[i])))
else:
msg.append(u"表I中第%d位元素【%s】!=表II中第%d位【%s】"%(i+1,list1[i],i+1,list2[i]))
for i in range(len(list1),len(list2)):
msg.append(u"表II中第%s位元素【%s】不在表I中" % (i+1,list2[i]))
return {"status": False, "message": msg}
re=List_Cp_List(b,a)
print re["status"]
for i in re["message"]:
print i