辛苦堆砌,转载请注明出处,谢谢!
上一篇文章介绍了Python的基本数据类型和控制流,本篇开始,说说Python更复杂的数据类型,不过这里的复杂是指其具有一定的结构,并不是说这些数据类型真的很难,实际上还是很简单的,主要包括列表,元祖,集合和字典。基于这些数据类型,我们可以有效地组织数据,并进行灵活的处理。
先来看看我们的列表。
什么是列表?
列表是用[]括起来,用,分割的一系列数据,如
[1, True, 'abc', [2, False, 'def']]
可以看到,列表并不要求其内放置相同类型的数据,但是我们在实际使用中,一般都会放置相同类型的数据,以便于我们进行处理。如
[1, 2, 3]或者['abc', 'def']
如何对列表取值或修改?
(1) 获取列表长度
使用len()全局方法,len()方法还可以用来测量字符串,元祖以及字典的长度
>>> len([1,2,3])3
(2)列表下标操作
我们可以使用下标对列表进行操作,列表第一个元素的下标为0,第二个为1,以此类推,也可以使用负数,-1代表倒数第一个元素,-2代表倒是第二个元素,以此类推。
我们下面的例子假设都使用列表[1,2,3]进行,赋值给变量a,利用下标读取值:
>>> a[1]2
>>> a[-3]1
修改对应下标处的值(后续修改操作后记得执行a=[1,2,3],将a变量还原)
>>> a[1]=4>>> a[1, 4, 3]
删除对应下标处的元素,使用del语句
>>> del a[1]>>> a[1, 3]
通过下标截取子列表,使用start_index:end_index作为下标作用于列表即可,注意,取得的子列表不包括end_index对应的元素,也就是子列表区间为[start_index, end_index),另外,我们可以省略start_index,表示从0开始,省略end_index,表示到达列表末尾
>>> a[1:3][2, 3]
>>> a[:2][1, 2]
>>> a[1:][2, 3]
>>> a[:][1, 2, 3]
>>> a[-2:][2, 3]
执行截取子列表操作之后,看看a的值
>>> a[1, 2, 3]
a并没有被改变,而是生成了新的子列表,千万注意。
(3)列表的连接
>>> a=[1,2,3]>>> b=[4,5,6]>>> a+b[1, 2, 3, 4, 5, 6]
(4) 列表的复制
>>> a*3[1, 2, 3, 1, 2, 3, 1, 2, 3]
(5)列表的常用方法
看到这里,熟悉面向对象的人应该能够想到,如果列表有方法,那么列表实际上是一种Python的类,的确如此
>>> a.__class__<class 'list'>
我们先不去关注Python面向对象编程的部分,毕竟不面向对象的Python已经能够解决我们的很多问题了。我们只是去看看list,也就是列表类,有哪些常用的操作。由于这些list类的方法,会直接改变列表的内容。在IDLE输入help(list)可以输出list类的手册,可以更深入的了解列表的方法。先执行
>>> a=[1,2,3]
(a) 查找对应值的下标值
>>> a.index(2)1
如果值不存在,Python会抛出错误ValueError
>>> a.index(4)Traceback (most recent call last): File "<pyshell#35>", line 1, in <module> a.index(4)ValueError: 4 is not in list
(b)列表尾添加值
>>> a.append(4)>>> a[1, 2, 3, 4]
(c)列表插入值
>>> a.insert(1, 4)>>> a[1, 4, 2, 3]
insert方法的第一个参数是要插入的下标位置,第二个参数是要插入的值。
(d)删除值
>>> a[1, 4, 2, 3]>>> a.remove(4)>>> a[1, 2, 3]
这里注意和前面del区分,del再知道下标时很好用,删除对应下标的值,remove则处理知道值但不知道下标的情况。
如果删除不存在的值,会报错
>>> a.remove(4)Traceback (most recent call last): File "<pyshell#44>", line 1, in <module> a.remove(4)ValueError: list.remove(x): x not in list
如果列表有重复值,删除会怎样?
>>> a=[1,2,3,4,3]>>> a.remove(3)>>> a[1, 2, 4, 3]
删除了第一个匹配的元素
(e)排序
>>> a=[2,3,1,7]>>> a.sort()>>> a[1, 2, 3, 7]
(6)列表的使用
(a) 用于循环,可以使用in遍历a中的所有元素
>>> a=[1,2,3]
>>> for b in a: PRint(b, end=' ')
输出1 2 3
(b) 多重赋值
如果我们想把列表中的值分别赋值给多个变量,我们没必要这样
>>> a[1, 2, 3]>>> b=a[0]>>> c=a[1]>>> d=a[2]
只需要一条语句即可
>>> b,c,d=a
(c) 判断某个值是否在列表中,用in和not in进行操作
>>> 1 in aTrue>>> 4 in aFalse>>> 1 not in aFalse>>> 4 not in aTrue
以上就是列表的内容,了解了列表,元祖就相当简单了,元祖就是只读的列表,不能对其进行修改,只能获取值,只要记住这一点就足够了,元祖用()扩住,逗号分隔,如(1,2,3),但是如果元祖只有一个值,一定写成(1,),后面加一个逗号,否则,Python会认为1是用括号扩住的常数1。列表和元祖之间可以相互转换
>>> a[1, 2, 3]
>>> tuple(a)(1, 2, 3)>>> list(a)[1, 2, 3]
最后再来了解一下set,也就是集合,集合和列表类似,可以修改,也可以添加元素,差别在于,列表是一个有序的双向队列,集合无序;列表可以保存重复的元素,而集合不行,如果有重复元素,集合只会保留一个。集合是用{}括起来,用逗号分隔的单个值,这里记住是单个值,以方便和后面的字典区分。如{1,2,3}
元祖,列表和集合三者可以相互转换,因为他们都是一维的数据结构
>>> a[1, 2, 3]>>> tuple(a)(1, 2, 3)>>> set(a){1, 2, 3}>>> list(a)[1, 2, 3]
集合类的可操作方法不多,可以help(set)查看,另外,由于集合无序,所以不能使用下标进行索引,也没有sort()方法;集合不能有重复元素,所以集合不能进行复制,总之,记住集合无序且不能有重复,所以列表中与顺序和重复有关的操作,集合都是不合法的。
新闻热点
疑难解答