Python常见数据类型

简介

Python最常见的数据类型分为序列与映射两大类。
常见的序列有列表list[]、元组tupple()、字符串str三种,常见的映射为字典{}。


序列

通用操作

索引、分片、相加、相乘、检索(判定成员资格)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>> a = [1,2,3,4]
>>> b = [3,4,5,6]
#索引,提取第一个元素,从0开始
>>> a[0]
1
#分片,提取从0开始到1结束的元素
>>> a[:2]
[1, 2]
#分片,提取从3开始到结束的元素
>>> b[3:]
[6]
#相加
>>> a+b
[1, 2, 3, 4, 3, 4, 5, 6]
#相乘
>>> a*2
[1, 2, 3, 4, 1, 2, 3, 4]
#检索
>>> 1 in a
True
>>> 5 in a
False

列表

函数与方法的区别
函数一般是通用的,适用与多种类。方法本质上还是是函数,但方法是属于某个类名下的。这一点从两者不同的调用形式上也可以看出来。
函数的调用: 函数名(参数1,参数2…),例如len(),min(),max()这些都是通用的函数
方法的调用:对象名.方法名(参数1,参数2…),下面会讲到列表的常用方法

常用函数:
list(),可以将一个其他类型的对象转换为list
range(start,end,step),返回一个数值递增列表,默认start为0,step为1,不包含end
map,reduce对列表进行映射与归约

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> list('hello')
['h', 'e', 'l', 'l', 'o']
# 从1开始,步长为2,不包括5。结果为1,3
>>> for i in range(1,5,2):
print(i)
# map: 针对多个列表的对应元素运用函数
# reduce: 针对参数序列中元素进行累积运用函数
>>> a = [1, 6, 3]
>>> b = [4, 5, 6]
# 先对a,b两个序列的对应元素取最大值,结果返回一个列表c=[4,6,6]
>>> c = map(max, a, b)
# 再对列表c中的元素累积运用乘法,即 4*6*6=144
>>> from functools import reduce
>>> reduce(lambda x, y: x*y, c)

常用方法:
append:在列表的末尾追加元素
count:计算某个元素出现的次数,有返回值
extend:合并列表(需注意:针对字符串使用extend方法,会把字符串拆分为单个的字符,慎用)
index:查找某个元素第一次出现的位置
insert:在指定位置插入元素
pop:按位置移除指定元素并返回该元素的值,有返回值
remove:按照给定的值删除第一个匹配到的元素
sort:对列表进行排序

列表的复制与克隆
L1 = L ,L1为L的别名,本质上还是同一个对象,对L1操作即对L操作
L1 = L[:] ,L1为L的克隆,即另一个拷贝

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#声明列表
>>> a = []
#通过字符串创建列表
>>> a = list('hello')
# 添加
>>> a.append('o')
>>> a
['h', 'e', 'l', 'l', 'o', 'o']
# 计算l出现的次数
>>> a.count('l')
2
#将列表b合并到a上
>>> b = list('world')
>>> a.extend(b)
>>> a
['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd']
#将字符串c合并到a上,效果与b相同,
#因为字符串实质上还是单个字符的列表,使用extend合并相当于将字符串拆分成一个个的字符合并到列表里面去,插入字符串应该用下面的insert
>>> c = 'world'
>>> a.extend(c)
# 查找'l'第一次出现的位置
>>> a.index('l')
2
# 在下标为0的位置插入'x'
>>> a.insert(0,'x')
>>> a
['x', 'h', 'e', 'l', 'l', 'o', 'o', 'w', 'o', 'r', 'l', 'd']
#删除下标为0的元素,pop方法有返回值,此处也可以用 del a[0]
>>> a.pop(0)
'x'
>>> a
['h', 'e', 'l', 'l', 'o', 'o', 'w', 'o', 'r', 'l', 'd']
#删除第一个匹配到的'l'
>>> a.remove('l')
>>> a
['h', 'e', 'l', 'o', 'o', 'w', 'o', 'r', 'l', 'd']
#排序
>>> a.sort()
>>> a
['d', 'e', 'h', 'l', 'l', 'o', 'o', 'o', 'r', 'w']
#列表转字符串
>>> ','.join(a)
'd,e,h,l,l,o,o,o,r,w'

元组

元组因为不可变,所以除了可以创建和访问外没有太多的操作

1
2
3
4
5
6
#创建空元组
>>> a = ()
#创建一个元素的元组,需加逗号
>>> a = (1,)
>>> a
(1,)

字符串

字符串本身不可改变,所有对字符串的“改变”都是返回一个新的字符串。
关于字符串的操作经常会使用正则表达式(re模块)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
str="hello world"
# 字符串就是由单个字符组成的元组序列,str[0]就是第一个字符h

# 以下为string的内置方法
# 首字母大写
str.capitalize()
# 全部大写
str.upper()
# 全部小写
str.lower()
# 替换,从左边开始,仅把1个o替换成0
str.replace(old='o', new='0', count=1)
# 从0:3的元素中进行查找,l是否出现,0为出现,-1为未出现
str.find('l', 0, 3)
# l第一次出现的位置
str.index('l', 0, 3)
# 从0:3,l出现的次数
str.count('l', 0, 3)
# 拆分字符串,仅拆分1次,即只拆分为2段
str.split(sep='o', maxsplit=1)
#连接字符串,先用'o'拆分,再用'o'连接
seq = str.split(sep='o')
'o'.join(seq)
#删除开头结尾的字符,参数空则默认删除空白字符(包括\t\n\r\f\v)
str.strip('d')

映射

字典

基本操作:
dict(zip(list1,list2)):将两个列表组合转换为字典,list1为键(如有重复项,去重),list2为值
len():返回字典的项(键值对)数
d[k]:返回字典中键=k的值
del d[k]:删除字典中键=k的项
k in d:检查字典中是否有键=k的项 ,等价于 k in d.keys()

常用方法:
clear:清空字典
get:根据给定的键返回对应的值,如果键不存在,返回None
items:将字典中项转化为列表,每个项以键值对(key,value)的形式作为列表的一个元素
keys:将字典的键以列表的形式返回,类似的iterkeys返回一个键的迭代器
values:将字典的值以列表的形式返回,类似的itervalues返回一个值得迭代器
pop:根据给定的键,移除对应的项,如果键不存在则报异常,并将移除项的值作为返回值
popitem:随机移除字典中的一个项,并将移除的项作为返回值
setdefault:根据给定的键返回对应的值,如果键不存在,添加这个键并设定对应的值(默认为None)
update: d1.update(d2),用字典d2去更新d1,对d1的键值对进行新增或更新

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
>>> a = {'name':'xzm','age':18}
# 清空
>>> a.clear()
>>> a
{}
>>> a = {'name':'xzm','age':18}
# get
>>> a.get('name')
'xzm'
>>> b = a.get('sex')
>>> type(b)
<class 'NoneType'>
>>> a.items()
dict_items([('age', 18), ('name', 'xzm')])
>>> a.keys()
dict_keys(['age', 'name'])
>>> a.values()
dict_values([18, 'xzm'])
# 删除项
>>> a.pop('age')
18
>>> a
{'name': 'xzm'}
>>> a.popitem()
('name', 'xzm')
>>> a
{}
# setdefault
>>> a = {'name':'xzm','age':18}
>>> a.setdefault('name')
'xzm'
>>> a.setdefault('sex','M')
'M'
>>> a
{'age': 18, 'sex': 'M', 'name': 'xzm'}
# update,更新年龄,新增职业
>>> b = {'age':28,'job':'DA'}
>>> a.update(b)
>>> a
{'job': 'DA', 'age': 28, 'sex': 'M', 'name': 'xzm'}

That’s all.
Happy writing!