学习某种编程语言,就肯定避免不了学习它的数据类型,Python也不例外。今天,我们来说说Python的几种常用的数据类型及用法。
Python3具有六种数据类型,分别是:数字,字符串(String),列表(List),元组(Tuple),集合(Set)和字典(Dictionary)。
首先来说说数字,Python3中能处理的数字包括整型(int),浮点(float),布尔(bool)和复数(complex)。
值得一提的是,Python3中是没有Long(长整型)这个概念的,一切都是int,试试简单的给某个变量赋值:
a = 1 //int型 b, c = 3, 4 //可以这样赋值 d = 3.141592653 //float型 e = True //bool型
我们可以使用内置函数type()来查看一个对象的类型,比如
print(type(a), type(b))
这样,我们就得到了含有数字类型的变量。Python对于科学统计领域来说可谓是占尽优势,对于数字的处理要更为的便捷。如果用Perl语言做对比的话,Perl可能更加擅长处理字符串,而Python在数字处理上更加优秀。所以一般面对不同的问题的时候,适当选用合适的语言也是一门学问。
Python的字符串,赋值起来也十分简单:
a = "This a sentence." a = 'This a sentence'
Python中允许单引号,双引号来定义字符串,这里我们只做一个大概了解。
列表,Python中使用的一种比较频繁的数据结构,使用一对方括号来表示的数据格式,用来存储其他对象,列表可索引,可拼装,可添加删除修改等。
l = list([1, 2, 3]) l = [1, 2, 3] l = [[1, 2, 3]]
这三种方式都同时定义了一个列表,其中第一句话和第二句话完全一样,我们可以用print()函数,直接打印观察列表。
print(l)
列表索引:这其中,对于某个元素,我们可以进行索引,比如,l = [1, 2, 3]中,我需要拿到数字2,那我就可以这样写:
a = l[1]
这里需要知道的是,计算机的计数是从0开始的,也就是l中对应的数字1,2,3的索引(index)位置分别是0,1,2
根据上面这步,我们就拿到了数字2的一个对象引用,它直接指向数字2,我们这里的a = l[1],实际上并不是把l[1]的值给a,而是将a的值指向l[1]所在的地址,这点以后可以慢慢讲,目前知道索引的位数就足够了。
列表修改:修改列表的方法有很多,有单元素修改的,有整体列表修改的,这里可以这样理解一下:
l = [1, 2, 3] l = [2, 3, 4] #这种是直接替换l指向的对象 l[1] = 2 #这种是改变第一个元素 print(l) #打印查看 l = [2, 2, 4] #会发现第一个元素变成2了
列表拼接:如果我想将两个列表拼接起来,我可以:
l = [1, 2, 3] r = [2, 3, 4] l = l + r #输出就会成为[1, 2, 3, 2, 3, 4] l = l.extend(r) #与上一句等价, extend相当于延伸,扩展。这样,我们就可以将两个列表拼接到一起了
列表也支持删除操作,比如我需要删除上述情况l列表中的第二个元素,数字2,那我可以有如下操作:
del l[1] #这里第一位就会被删除,原列表变成:[1, 3, 2, 3, 4] del l[3] #这里删除第三位,列表变成[1, 3, 2, 4]
列表的添加:列表的数据结构近似于一个队列,我们知道队列的特性是FIFO(First In First Out),我们这里添加的新元素,就是从右向左添入(append)列表的,如下:
l = [1, 2, 3] l.append(4) l.append(5) print(l) #得到 l = [1, 2, 3, 4, 5]
列表的反转:列表同时支持反转元素内的所有元素,比如:
l = [2, 3, 4, 5, 6] l.reverse() #这里调用自带反转函数 print(l) #得到[6, 5, 4, 3, 2]
这里出道题考一下诸位,观察下列代码说出结果:
Q1.
l = [[1, 2, 3]] l.reverse() print(l)
Python自带列表的整理排序,比如一个乱序的列表,就可以通过排序函数自动排序,有必要说一点的是,默认按生序排列,我们可以通过添加参数reverse改变为降序:
l = [8, 2, 5, 2, 3] l.sort() #[2, 2, 3, 5, 8] l.sort(reverse = True) #[8, 5, 3, 2, 2] #---------分割线--------- l = sorted(l) print(l)
这里不难看出,改变reverse可以改变排序方式,True为降序,False为默认升序。sort()函数默认不返回任何值,所以我们可以直接l.sort()这样用,那如果我想将这个引用给其他变量的时候,我可以使用sorted()方法,该方法返回一个排序好的列表,如上所写。
Answer:
Q1. l = [[1, 2, 3]],这里因为是列表套列表,[1, 2, 3]作为l的第0位的元素,也就是l[0],本身不发生改变,但实际上因为l只有一个元素,这个元素就是[1, 2, 3],所以他不会发生变化,但是假如这样:
l = [[2, 3, 4], [1, 2, 3], [1, 3, 5], [2, 4, 5], [1, 4, 2, 6]] l.sort() print(l)
他就会按照内部中的元素一个一个比对排序,得到:
l = [[1, 2, 3], [1, 3, 5], [1, 4, 2, 6], [2, 3, 4], [2, 4, 5]]
元组,元组使用一对圆括号来表示数据格式,它的特点就是不可改变(immutable),换言之,当元组内的元素存在后,就不可修改了。元组是一种和列表具有相似特点的数据结构,唯一就是不可修改,如下定义:
t = (5, 4, 3) #常规定义元组 t = ([5, 4, 3]) #转变一个list变成元组,结果为(5, 4, 3) t = (3,) #注意,一个元素的时候,需要添加一个逗号,不然会变成int型
这里需要说的部分就是,当元组成员中只有一个元素的时候,需要添加逗号表达一个元素的元组。
元组支持索引,但是不可修改,支持拼接操作,同列表。
t = (1, 2, 3) #两个元组 o = (4, 5, 6) t = t + o #拼接为(1, 2, 3, 4, 5, 6) print(t[2]) #打印出3
集合,Python中的集合概念,与数学中的集合概念相同。元素唯一性
s = set([1, 2, 3, 4, 4, 2, 1]) #其中的4,2,1重复多次,集合会自动删去这些元素,只出现一次 print(s) #得到{1, 2, 3, 4}
集合会保留最大不重复元素,在某些情况中,某些问题中,这种结构很有帮助
字典,这可是一个大项,Python中的字典也是Hash实现的,我个人是个字典狂魔,使用字典的频率远超以上所有结构,为什么?因为好用。字典的数据结构是使用一种映射关系对应,俗话说叫一个萝卜一个坑,加入我有一个列表l,其中的元素包括['1', '2', '3'],我又有一个列表p,其中的元素包括['A', 'B', 'C']三个元素。字典就是用映射的思想,将l中的元素,看作key,将p中的元素,看作value,形成一个个key: value的映射(map)关系。每当我们去查找l[0]这个位置的key的时候,它会返回它的value,假设我们这里映射的是'A',那我们查找起来就比较方便了。这种数据结构给一些条件提供了极大的便利,比如累加元素统计个数,字典的缺点是占用更多的空间。此外,讲到这里,稍为说一下,一个字典空间是有限的,当字典快满之后,需要重新申请更大的空间来存储新的值,有兴趣的同学可以去查查这块。
字典如下定义:
d = {} #定义一个空字典 d = dict() #第二种方式定义空字典 d['0'] = 'A' #赋值了一组key:value '0':'A' d['1'] = 'B' #添加了新的一组 d['1'] = 'C' #注意,字典只允许存在一个键(key),所以'1':'B'不存在了,替换成'1':'c' d = {'0':'A', '1':'B', '2':'C'}#第三种定义字典方式
这里的元素的数据类型是string,还可以有任何一种类型,比如d['1'] = [1, 2, 3],或者更复杂的d['2'] = {'A': 'Hello', 'B': [3, 4, 5]}等。这些都是需要遇到实际问题来决定的,下面讲一些字典的常用方法。
我们在使用字典的时候,要知道字典是无序的,上面那段代码中的键(key):'0','1'在字典中没有任何顺序而言,如果要访问字典的大小,我们可以使用length函数,他的写法是:
len(d) #这里会打印字典d的长度,这种方法同样适用于string, list, set, tuple, dict。其中字典里的len()会返回字典中元素的个数,也就是有多少个key: value组合,我们这里有两个,所以是2。
如果我们想要访问字典的键,我们可以使用key函数:
d.keys()
如果我们需要访问值,我们可以使用value函数:
d.values()
它会返回一个dict_values对象,里面包含所有values(同样是无序的,但是字典知道哪个key和这个value对应)。
那肯定有人会问了,有没有直接返回键值对的方法?有:
d.items()
这个方法会返回dict_items对象。
修改字典:
修改字典的方法有很多,假如知道了key,我们想对应修改值(value):
d.update({'1':'5'}) #修改key l的值为'5' d['l'] = '5' #另一种方法修改key l
删除字典键:
del d['l'] #删除键为l的键值对,key不存在时,value自然不存在
删除清空字典:
d.clear() #清空字典,该句等同于 d = {} 这种重新建空的方法 del d #直接删除字典,执行之后不存在字典变量d
额外讲一个我喜欢的小方法设置默认一组键值对:
d = {} d.setdefault(key, value) #这样就创建了一个 {key: value}的字典
这样写的好处其实有些情况会用到,比如刚才说到的统计,我们假设统计出现的字符:
d = {} for i in ['a', 'b', 'c', 'c', 'c', 'd']: d[i] = d.setdefault(i, 0) + 1 #这里setdefault使得对应的key初始值都是0,然后每次遇到一个值都会给当前key的 value + 1 print(d) #结果为: {'a':1, 'b':1, 'c':3, 'd':1},字典无序,这是其中一种输出
今天先说到这里,这几种数据结构和类型都是比较基础的,下面给大家出一点题,试着写出结果:
Q3
l = [2, 3, 7, 4, 9, 1, 2] b = sorted(l) print(l)
Q4
l = [2, 3, 7, 4, 9, 1, 2] l.sort(reverse = True) print(l)
Q5
a, b, c = 3, 7, 3.5556 l = [2, a, b, 4, 9, c, 2, 2, 1] l = set(l) print(l)
Q6
l = [2, a, b, 4, 9, c, 2, 2, 1] l.reverse() print(l)
Q7
print(l[4])
Q8
# s = (3) #判断是否合法
Q9
d = {'a': 1, 'b': 73, 'z': 'c', 't': 3.1415926} d['b'] = d['t'] + 1 print(d)
正确答案:
Q3: [2, 3, 7, 4, 9, 1, 2] 打印的是l Q4: [9, 7, 4, 3, 2, 2, 1] 降序 Q5: {1, 2, 3.5556, 3, 4, 7, 9} 是一个集合,去重 Q6: [1, 2, 2, 3.5556, 9, 4, 7, 3, 2] 反转 Q7: 9 Q8: 不合法,单元素的set需要添加逗号: set(3,) Q9: {'a': 1, 'b': 4.1415926, 't': 3.1415926, 'z': 'c'}