一 列表
列表是可变类型的序列,而元组与字符串是不可变类型的序列
1.列表的定义:# 定义一个空列表In [21]: list = [] In [22]: type(list)# 通过python的内置函数type查看list的数据类型Out[22]: listIn [23]: print list[]# 定义一个包含元素的列表,元素可以是任意类型,包括数值类型,列表,字符串等均可。In [24]: list1 = ["fentiao","5","male"] 此处定义一列表,名为list1In [25]: print list1['fentiao', '5', 'male'] 2. 列表的修改 修改列表的元素:直接重新赋值;.此处我查看下标为1元素的值,重新给这个索引赋值,我们发现列表的元素是可变的;In [36]: list1Out[36]: ['fendai', 4, 'female']In [37]: list1[1]Out[37]: 4In [38]: list1[1]=7In [39]: list1Out[39]: ['fendai', 7, 'female']In [16]: list1 = ["fentiao","5","male"]In [17]: list1[0] = "hello"In [18]: print list1['hello', '5', 'male']列表的修改>>> list1['fentiao', 5, 'male', 'cat']>>> id(list1)140205776057408>>> list1[0] = "fendai">>> id(list1)140205776057408列表的操作:理解"对象=属性+方法"与类3.列表的索引和切片# 列表的索引:下标是从0开始计算,比如list[0]读取的是列表的第1个元素; list[-1]读取的是列表的倒数第1个元素;In [39]: list1Out[39]: ['fendai', 7, 'female']In [40]: list1[0]Out[40]: 'fendai'In [41]: list1[-1]Out[41]: 'female'# 列表的切片>>> list1[:] //通过切片的方式可以实现列表的复制['fentiao', 5, 'male']# 0代表从哪个索引开始切片,3代表切片到哪个位置,并且不包含第三个索引,2代表切片的步长;>>> list1[0:3:2]['fentiao', 'male']In [42]: list1[:]Out[42]: ['fendai', 7, 'female']In [43]: list1[1:]Out[43]: [7, 'female']In [44]: list1[:2]Out[44]: ['fendai', 7]4.列表的添加: 列表可通过append方法添加元素;In [45]: list1.list1.append list1.extend list1.insert list1.remove list1.sortlist1.count list1.index list1.pop list1.reverse In [45]: list1.append("cat")#####在列表的末尾添加In [46]: list1Out[46]: ['fendai', 7, 'female', 'cat']In [48]: help(list1.append) ####查看list1.append的使用方法;列表的长度:In [51]: len(list1) #####查看列表的长度Out[51]: 4In [52]: list1Out[52]: ['fendai', 7, 'female', 'cat'] 列表可通过方法添加元素;截图:In [16]: list.extend('hel')
In [17]: listOut[17]: ['qqqqqq', 'fentiao', '5', 'male', 'hello', 'h', 'e', 'l'] 在指定位置添加元素使用inert方法;L.insert(index, object)截图:5.列表的删除:方法一:In [19]: list1 = ["fentiao","5","male"]In [20]: list1.remove("fentiao")In [21]: list1Out[21]: ['5', 'male']方法二:In [22]: list1 = ["fentiao","5","male"]In [23]: list1.remove(list1[2])In [24]: list1Out[24]: ['fentiao', '5']方法三:In [25]: list1 = ["fentiao","5","male"]In [26]: del(list1[1])In [27]: list1Out[27]: ['fentiao', 'male']6.列表元素的查找:var in list判断一个var元素是不是属于list列表:var in list ####元素属于列表var not in list ####元素属于列表In [1]: list=['fentiao','5','male']In [2]: 'fentiao' in list ####'fentiao'元素属于列表Out[2]: TrueIn [3]: 'fentiao' not in list ####'fentiao'元素不属于列表Out[3]: False7.重复、连接及计算长度In [4]: list =[1,2,3]+[5,6,7] ######连接In [5]: listOut[5]: [1, 2, 3, 5, 6, 7]In [6]: list1=list*3 #####重复In [7]: list1Out[7]: [1, 2, 3, 5, 6, 7, 1, 2, 3, 5, 6, 7, 1, 2, 3, 5, 6, 7]In [8]: len(list1) ##########计算长度Out[8]: 18练习(1)打印1-100中所有的偶数 打印1-100中所有的奇数
In [8]: range (2,100,2)In [9]: range (1,100,2) (2)控制出栈,入栈代码:stack = []def pushstack(): item = raw_input('new item:') stack.append(item)def popstack(): if len(stack)== 0: print "can not pop fromempty item" else: print "%s pop from stack"%stack .pop()def viewstack(): print stackdef showmenu(): pro = ''' welcome to stackmanagep(U)shP(O)p(V)iew(Q)uitEnter choice:''' while True: choice =raw_input(pro).lower() if choice =="u": pushstack() elif choice =="o": popstack() elif choice == "v": viewstack() elif choice == "q": print "quit stackmanage" break else: print "inputu,o,v,q"showmenu()运行结果图:(3)break与continue区别:
截图: 二 元组tuple1.元组的定义:#定义空元组tuple = ()#定义单个值的元组tuple = (fentiao,)#一般的元组tuple = (fentiao, 8, male)#为什么需要元组?>>> userinfo1 = "fentiao 4 male">>> userinfo2 = "westos 10 unknown">>> userinfo1[:7]'fentiao'>>> userinfo2[:6]'westos'字符串中操作提取姓名/年龄/性别的方式不方便,诞生元组与列表这两个数据类型>>> t1 = ("fentiao",4,"male")>>> t2 = ("westos", 10, "unknown")>>> type(t1)<type 'tuple'>>>> type(t2)<type 'tuple'>>>> t1[0]'fentiao'>>> t2[0]'westos'>>> t2[0:2]('westos', 10)2.元组特性(1)不能对元组的值任意更改>>> t1('fentiao', 4, 'male')>>> t1[1] = 5Traceback (most recent call last): File "<stdin>", line 1,in <module>TypeError: 'tuple' object does not support item assignment(2)对元组分别赋值,引申对多个变量也可通过元组方式分别赋值In [4]: a,b,c=(1,2,3)In [5]: print a,b,c1 2 3In [6]: print a1In [7]: print b2In [8]: print c3注意:C语言中,定义一类型,必须先开辟一存储空间,当后期重新赋值时也一定是整型的;python中,先在内存上存储数据后,再通过标签去引用。不同的字符串占用不同的存储空间。>>> str1'12345'>>> id(str1)140205776037520>>> str1 = "abcde">>> id(str1)140205776037424>>> str2 = "12345">>> id(str2)1402057760375203.元组的操作元组也属于序列,可执行的操作如下:索引、切片、重复、连接和查看长度In [9]: yuan = (1,2,3,4)In [10]: type(yuan) ####查看数据类型Out[10]: tupleIn [11]: yuan[1] ####索引Out[11]: 2In [14]: yuan[:] #####切片Out[14]: (1, 2, 3, 4)In [15]: yuan[1:] #####切片Out[15]: (2, 3, 4)In [16]: yuan[:2] #####切片Out[16]: (1, 2)In [9]: yuan =(1,2,3)In [10]: l=yuan*3 #####重复 In [11]: lOut[11]: (1, 2, 3, 1, 2, 3, 1, 2, 3)In [12]: yuan =(1,2,3)+(4,5,6) #####连接In [13]: yuanOut[13]: (1, 2, 3, 4, 5, 6) In [14]: len(yuan) #####查看长度Out[14]: 6注意:In [25]: t = (1) #####赋值时输入单个数字时,数据类型是×××In [26]: type(t)Out[26]: intIn [28]: t = ('hello')#####赋值时输入字符串时,数据类型是字符串In [29]: type(t)Out[29]: strIn [30]: t = (1,)#####赋值时输入单个数字加,时,数据类型才是元组In [31]: type(t)Out[31]: tuple4.元组的方法t.count(value)-->int 返回value在元组中出现的次数; t.index(value) 返回value在元组中的偏移量(即索引值)In [16]: t = ('hello','linux')In [17]: type(t)Out[17]: tupleIn [18]: t.count('hello') ####hello在元组中出现的次数Out[18]: 1In [19]: t.index('linux') #####linux在元组中的偏移量Out[19]: 1In [20]: t.index('hello') #####hello在元组中的偏移量Out[20]: 05.删除元组In [28]: t= (1,2,3)In [29]: del tIn [30]: t---------------------------------------------------------------------------NameError Traceback (most recent call last)<ipython-input-30-b7269fa25085> in <module>()----> 1 tNameError: name 't' is not defined150pxpIn [23]: t= (1,2,3)In [24]: cmp(t,(1,2))Out[24]: 1In [25]: cmp(t,(1,2,3,))Out[25]: 0In [26]: cmp(t,(1,2,3,4))Out[26]: -1In [27]: cmp(t,(1,2,3,4,5))Out[27]: -1三 集合1.集合的定义set = {}set = {1,2,3}set = {1,2,3,1,2,3}set = {1,2,3,'hello'}set = {1,2,3,'hello',(1,2,3)}set = {1,2,3,'hello',(1,2,3),[1,2,3]}看看是否都可以成功定义集合?截图:集合里有列表不能成功2.set的应用场景集合是一个无序的,不重复的数据组合。 列表去重 关系测试:如交集、差集、并集的关系测试3.集合的关系测试操作 交集: list_1.intersection(list_2) 并集: list_1.union(list_2) 差集: list_1.difference(list_2)list_2.difference(list_1) 对等差分 list_1.symmetric_difference(list_2) 子集 list_1.issubset(list_2) 父集 list_1.issuperset(list_2) 有无交集 list_1.isdisjoint(list_2) 交集: list_1 & list_2 并集: list_1 | list_2 差集: list_1 - list_2 list_2 - list_1对等差分 list_1 ^ list_2 4.集合的添加 s.add(1) 在集合中添加一项 s.update([1,3,4]) 在集合中添加多项,跟的参数应该是可迭代类型集合的删除s.remove(1) 删除集合中指定的元素 s.pop() 随机删除集合中的某个元素,并返回删除的元素5.集合的其他操作 len(s) 显示集合set的长度 "1" in s 检测某元素是否为集合s的成员,返回布尔值集合的其他操作 s.copy() 集合的浅拷贝,此处不深入研究,后面会说 s.clear() 清空集合的所有元素