目录
序列类型
1、序列对象
2、列表类型
1)、创建列表对象的两种方法
2)、访问列表
3)、列表更新
4)、列表的操作符
5)、嵌套列表
6)、列表中的函数与方法
7)、List[] 与 list[:] 的区别(★)
8)、综合示例
3、元组类型
4、字典类型
1)、访问字典
2)、使用示例
3)、同 列表 、元组的比较
5、集合
· 使用示例
6、数据类型转换
“序列” 是程序设计中经常用到的数据存储方式。在其他程序设计语言中,“序列”通常被称为”数组“,用于存储相关数据项的数据结构。Python 语言中本身并没有数组的概念,但在 Numpy 中提供了数组对象,也弥补的Python自身的不足。
序列与数组的区别:数组是提供了能够存放同一数据类型且连续的内存空间 ;序列虽然是连续的存储空间,但可以存放不同数据类型,也可以理解为更加 “高级的数组”。
常用序列对象: 列表 List (可变数据类型),元组 Tuple(不可变数据类型),集合 Sets(可变数据类型),字典 Dictionary(可变数据类型),字符串 String(不可变),range( ) 。
List(列表) 是 Python 中使用最频繁的数据类型。列表可以完成大多数集合类的数据结构实现,它支持字符,数字,字符串甚至可以包含列表(即嵌套);列表用 " [ ] " 标识,是 python 最通用的复合数据类型。
(1)、默认方法:列表对象 = [元素1, 元素2, 元素3, ….. , 元素N, ]
(2)、使用 range()内置函数 :列表对象 = list( range (stop) ) ,python3 list() 函数是对象迭代器,可以把range()返回的可迭代对象转为一个列表(range 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表),返回的变量类型为列表。range() 函数可创建一个整数列表,一般用在 for 循环中 :range (start, stop[, step]) ,start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5); stop: 计数到 stop 结束,但不包括 stop,如:range(0, 5) 是[0, 1, 2, 3, 4] ,没有5 ;step:步长,默认为1 ,如:range(0, 5) 等价于 range(0, 5, 1) 。
列表中值的获取可以用到 [头下标 : 尾下标 : 步长] ,就可以截取相应的列表:从左到右下标索引默认 0 开始,从右到左下标索引默认 -1 开始,下标可以为空表示取到头或尾。
所谓的更新指的是对列表元素的 重新赋值、删除、添加等相关操作。
在前面介绍字符串中已经了解过 + 和 * 号的作用,列表用法与其类似,同时也有 len( ) 和 in 等操作。如
列表中可以放置各种类型的数据,也可以存放列表类型,可理解为高级的多维数组。
为了更好地操作列表对象,Python也提供了很多的函数:len(list) : 获取列表元素的个数;max(list) : 获取列表中的最大值;min(list) : 获取列表中的最小值;list(seq) : 将元组对象转换成列表对象。
列表也提供了大量的方法:.append(obj) :在列表末尾添加一个元素;.count(obj) : 统计某个元素在列表中出现的次数;.index(obj) : 从列表中找出某个值第一个匹配的索引位置;.insert(index, obj) : 向指定位置前序添加一个元素 ;.remove(obj) : 移除一个指定的元素;.reverse() : 反向列表中的元素;.sort() : 对列表进行排序 。
“ [ ] ” 标识是典型的引用操作,传址操作 ;“ [:] ”标识是典型的赋值操作,传值操作 。
# 使用一对 [] 来定义列表
list1 = [1,'xxs',"你好"]
print(type(list1)) #检测一下 list1 的类型
print(list1)
# 使用 range 函数 快速生成列表
list2 = list(range(0,10)) #range 返回的是 需要转换成列表类型
print(list2)
range(0,5)
print(range(0,5)) #检测下 range 返回类型
print(list(range(5))) #转换后输出
# 下标输出列表值
print(list1[2])
# 列表的遍历
for i in list1 :
print(i)
print('\n')
# list切片
list3 = list(range(10))
print(list3)
print(list3[0:5]) # 不包括上界值
print(list3[0:9:2]) #按 步长 切片
print(list3[1::2]) #第二个参数可以不写,默认为全长
# list 是可变数据类型,可追加,可删除新元素
list3.append(10) #在最后位置增加
print('追加列表元素后:',list3)
list3.insert(6,666)
print('插入列表元素后:',list3)
list3.remove(list3[6]) #删除第六个位置的列表元素
list3.remove(6) #删除列表中值为 6 的元素
print('删除列表元素后:',list3)
print('\n')
# + / *
list4 = list(range(0,5))
list5 = list(range(5,10))
print('list4= ',list4)
print('list5= ',list5)
print('list4 + list5 = ',list4+list5)
print('list4 * 2 = ',list4*2)
# list 嵌套列表
list4.append(list(range(0,5)))
list5.append(list4)
print('list4 嵌套 :',list4)
print('list5 嵌套 list4 :',list5)
print('指定嵌套元素输出:')
print(list5[5]) #由于第六个元素是列表元素,故将全部输出
print(list5[5][5]) #打印出来的是 list5 中第六个元素 list4 中的第六个元素
print(list5[5][5][1]) #输出的是最内层的 1
list6 = [list4,list5]
print('list4 、 list5 整体列表嵌套 :',list6)
print('\n')
#打散插入
list7 = list("abcdefg")
print('字符串打散插入:',list7)
#一些函数
list8 = list(range(0,10))
print(list8)
print(len(list8))
print(max(list8)) #注意比较的元素需要保持一致,同为字符也是可以比较
print(min(list7))
# 排序
list9 = [3,1,6,2,8,7,5,9,0]
list9.reverse() # 反序
print(list9)
list9.sort() #作用于列表本身,默认为升序
print(list9)
list9.sort(reverse=True) #降序
print(list9)
# 深复制 :新申请一块新的内存,将复制的列表赋值到新空间中
list10 = list(range(0,10))
list11 = list10
list11[0] = 11
print(list10) #现在改了 list11 的值后 list10 也会改变
list12 = list10[:] #深复制
list12[0] = 111
print(list12)
print(list10)
应该算是比较全面地去解释了列表的使用,值得掌握。
Tuple(元组)类似于List(列表),但元组不能二次赋值(元组内的元素不允许更新),相当于只读列表。元组用“ ( ) "标识,内部元素用逗号隔开。语法:元组对象名称 = ( 元素1, 元素2, ……, 元素N )
元组与列表的所有操作基本类似,唯一不一样的地方是,元组的元素不允许被修改。
示例:
# 元组定义符号 ()
tuple1 = (1,'xxs',"张三")
print(tuple1)
print(tuple1[1])
# 遍历
for i in tuple1 :
print(i)
# tuple[0] = 2 #元组不可修改
# 其他的元组定义方式
tuple2 = tuple('abcdefg')
print(tuple2)
tuple3 = tuple(range(0,10))
print(tuple3)
#切片
print(tuple2[0:5])
print(tuple3[:]) # 默认为0,默认为最大
# 特别说明,定义一个只有一个元素的元组
list1 = [1] #列表定义一个元素,正确
tuple4 = (1) #错误,构不成 tuple
print(type(tuple4))
tuple5 = (1,) #正确定义单个元素
print(type(tuple5))
print(tuple5)
#几个函数
tuple6 = (1,3,1,4,5,2,1,3)
tuple6.count(1) #统计元组中 1 出现的次数
print(tuple6.count(1))
tuple6.index(3) #查看元组中 3 出现第一次时的索引
print(tuple6.index(3))
#tuple 也可以嵌套
tuple7 = ((1,2,3),('x','x','s'))
print(tuple7)
print(tuple7[0])
print(tuple7[0][0])
字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。字典当中的元素是通过键来存取的,而不是通过偏移存取。字典用“{ }”标识。字典由 索引(key) 和它对应的 值value 组成,是一个典型的 “k-v值 ” 数据结构。
语法:字典对象名称 = { } ;字典对象名称 = { key1 : value1, key2 : value2, …. , keyN : valueN }
k-v结构一般情况下在操作访问的时候都会使用 key 索引进行每个元素的读取操作。语法:字典对象名称[ key ] 表示访问 key对应的value值 ;字典对象名称.keys 表示访问当前字典所有key索引键 ;字典对象名称.values 表示访问当前字典所有 values 值 。
# 字典不能通过下标来访问!! 快捷键 Ctrl + / 单行注释
dictionary1 = {"name":"xxs" , "class":"三"}
print (dictionary1["class"])
# print(dictionary1[1]) 错误的
m={}
m['name'] = "sss" # 需要先声明 m 的类型才可这样写
m[0] = "xxx"
print (m['name'])
print(m.keys()) #输出字典的全部 键
print(dictionary1.values()) # 输出字典的全部 值
# 定义字典{}
dict1 = {'no1':{'name':'zhangsan', 'age':20, 'sex':'male'},'no2':{'name':'lisi', 'age':30, 'sex':'male'} }
# 访问字典,也是用类似数组下标索引的方式
print(dict1['no1'])
print(dict1['no1']['name'])
# 怎么来得到字典所有的key
for key in dict1.keys():
print(key)
# 怎么得到所有的value
print(dict1.values())
# 通过get key来得到key对应的value
print(dict1.get('no2'))
# items返回以key和value组成的一个元组列表
print(dict1.items())
# update :当碰到相同 键 时,会用新的 键值 去替代旧的
dict2 = {'no2': 11111, 'no3':22222}
dict1.update(dict2)
print(dict1)
# pop会删除元素而且会返回对应key的value
value = dict1.pop('no1')
print(value)
print(dict1)
从承载数据类型的结构角度看:python的数据类型分为数字类型和非数字类型。数字类型包括:整型、长整型、浮点型和复数型;非数字类型包括:字符串、列表、元组和字典。
共同点:都可以使用切片(截取)、链接(+)、重复(*)、取值(a[ ])等相关运算 ;截取方式相同:名称 [头下标 : 尾下标 ] ;下标是从0开始算起,可以是正数或者负数,下标为空则表示取到头或者尾 ;开始截取时,包含了下边界,而截取到最大范围不包括上边界。
不同点:列表 可以直接赋值,元组不可以赋值 ,字典按照 dict [k] = v 的方式赋值 。
集合是一个无序不重复元素的集,基本功能包括关系测试和消除重复元素。可以用大括号({})创建集合,注意:如果要创建一个空集合,你必须用 set() 而不是 {} ;后者创建一个空的字典。
# 定义集合
seta = {1,2,1,3,4,1,3,5,6,7,7} # 空的一对大括弧定义的是字典,而不是集合
setnull = set() # 定义空集合
print(seta) # 集合内部的元素不可以重复
# 集合是可变的
seta.add(8)
print(seta)
# 删集合元素
# seta.remove(9) # remove删除的时候,如果集合里不存在这个元素,会报异常
seta.discard(1) #
print(seta)
# 集合的交集
setb = set(range(5))
print(seta & setb ) #输出的是交集结果
# 集合的更新
setb.update(list(range(4, 11)))
print(setb)
当需要对数据内置的类型进行转换,就需要了解 python 数据类型的转换知识 。使用各种转换函数,转换函数返回一个新的对象,表示转换的值。语法格式:转换后变量 = 转换函数名称(待转换数据或变量)。
主要类型转换函数参考表
int(x [,base]) | 将x转换为一个整数 |
long(x [,base] ) | 将x转换为一个长整数 |
float(x) | 将x转换到一个浮点数 |
str(x) | 将对象 x 转换为字符串 |
tuple(s) | 将序列 s 转换为一个元组 |
list(s) | 将序列 s 转换为一个列表 |
dict(d) | 创建一个字典。d 必须是一个序列 (key,value)元组。 |
chr(x) | 将一个整数转换为一个字符 |
ord(x) | 将一个字符转换为它的整数值 |