python_基础04

来源:互联网 发布:华为盒子电视直播软件 编辑:程序博客网 时间:2024/06/03 20:54

这里写图片描述

这里写图片描述

将元组转化为list列表myli2 = list((1,2,3))  : [1, 2, 3]cmp:比较两个列表的大小**根据最短的哪个生成元组长度的。** zip("abckdfe",[1,2,3,3,])[('a', 1), ('b', 2), ('c', 3), ('k', 3)]

这里写图片描述

#给定一个列表,统计列表中元素个数name = "zhangsan"sorce_1 = [90,23,89];sorce_2 = [21,45,89];source = [name,sorce_1,sorce_2];count =0;len_sorce = len(source);i =0;while(i < len_sorce):    #判断列表中的元素是不是列表类型的数据: isinstance    if(isinstance(source[i], list)):        count += len(source[i])    else:        count +=1;    i+=1;print("%s count=%d"%(source,count));

这里写图片描述

#模拟堆栈数据结构stack = [];#存入数据def stack_push():    val = raw_input("push val:")    stack.append(val)#移出数据def stack_pop():    if(len(stack)>0):          print stack.pop(-1)  #弹出最上面的这个值#显示数据def stack_show():    print stack#主函数while(True):    cmd = raw_input("enter cmd:")    if(cmd == 'p'):        stack_push()    elif(cmd == 'o'):        stack_pop()    elif(cmd == 's'):        stack_show()    elif(cmd == 'q'):        break    else:        pass

这里写图片描述

#模拟队列数据结构seq = [];#入队def seq_enter():    val = raw_input("push val:")    seq.append(val)#出队def seq_out():    if(len(seq)>0):        return seq.pop(0) #队列:先进先出    else:        return None#显示数据def seq_show():    print seq#主函数while(True):    cmd = raw_input("enter cmd:")    if(cmd == 'p'):        seq_enter()    elif(cmd == 'o'):        val = seq_out() #出队的数据        if(val !=None):            print("out val:%s"%val);        else:            print("seq is None")    elif(cmd == 's'):        seq_show()    elif(cmd == 'q'):        break    else:        pass

这里写图片描述

元组:>>> t2 = tuple("what")>>> t2('w', 'h', 'a', 't')

这里写图片描述

这里写图片描述

tup = ("zhang",[10,289])>>> tup('zhang', [10, 289])>>> tup[1][0] = 90  #元组中的列表是可变的>>> tup('zhang', [90, 289])#不让对方修改我的数据#修改数据函数def change_func(list1):    print list1;    if(isinstance(list1,list)): #传入是类型 是不是列表,如果是,则修改第一个元素        list1[0] = 10;#原数据def main_func():    lista = [1,2,3]    change_func(tuple(lista))  #将列表强制转为元组    print lista#执行方法main_func(); 

这里写图片描述

>>> child = [("age","height"),[10,12]]>>> child[('age', 'height'), [10, 12]]>>> child1 = list(child)>>> child2 = list(child1)>>> id(child1)44729168>>> id(child2)44728968>>> id(child)44389240>>> child1[0] = ("age","height","weight")>>> child[('age', 'height'), [10, 12]]>>> child1[1].append(38)>>> child1[('age', 'height', 'weight'), [10, 12, 38]]>>> child2[('age', 'height'), [10, 12, 38]]child2 也改变了,这是不希望看到的,原因:child1 和 child2 进行和深拷贝 child可以看出:当改变值时,其实是新创建了一个元组,证明元组是不可变而列表追加值时,是在原来的列表中添加,而不是创建新的列表,所以child1 child2中的值不同的。>>> id(child[0])44397152>>> id(child1[0])44703336>>> id(child2[0])44397152>>> id(child[1])44703256>>> id(child1[1])44703256>>> id(child2[1])44703256

这里写图片描述

解决上面的问题 :进行深拷贝

>>> import copy>>> child = [("age,height"),[10,29]]#数据进行深拷贝,这样当child1修时,就不会影响child2中的数据元组:内存地址相同列表:内存地址不相同##深拷贝的list类型数据后的内存地址是不一样的,而浅拷贝的list数据类型内存地址是一样的>>> child1 = copy.deepcopy(child)>>> child1['age,height', [10, 29]]>>> id(child)43896880>>> id(child1)44389240>>> id(child[0])44704384>>> id(child1[0])44704384>>> id(child1[1])44391720>>> id(child[1])44391240
0 0
原创粉丝点击