python基础知识二
列表(list)和元组(tuple)字典(dict)和集合(set)的数据储存
列表(list)和元组(tuple)比较相似,它们都按顺序保存元素,所有的元素占用一块连续的内存,每个元素都有自己的索引,因此列表和元组的元素都可以通过索引(index)来访问。它们的区别在于:列表是可以修改的,而元组是不可修改的
字典(dict)和集合(set)存储的数据都是无序的,每份元素占用不同的内存,其中字典元素以 key-value 的形式保存。
序列类型
序列类型包括字符串、列表、元组、集合和字典,这些序列支持以下几种通用的操作,但比较特殊的是,集合和字典不支持索引、切片、相加和相乘操作。
序列切片
切片操作是访问序列中元素的另一种方法,它可以访问一定范围内的元素,通过切片操作,可以生成一个新的序列
sname[start : end : step]
参数的含义分别是:
sname:表示序列的名称;
start:表示切片的开始索引位置(包括该位置),此参数也可以不指定,会默认为 0,也就是从序列的开头进行切片;
end:表示切片的结束索引位置(不包括该位置),如果不指定,则默认为序列的长度;
step:表示在切片过程中,隔几个存储位置(包含当前位置)取一次元素,也就是说,如果 step 的值大于 1,则在进行切片去序列元素时,会“跳跃式”的取元素。如果省略设置 step 的值,则最后一个冒号就可以省略。
序列相加
Python 中,支持两种类型相同的序列使用“+”运算符做相加操作,它会将两个序列进行连接,但不会去除重复的元素
检查元素是否包含在序列中 in关键字
Python 中,可以使用 in 关键字检查某元素是否为序列的成员
和 in 关键字用法相同,但功能恰好相反的,还有 not in 关键字,它用来检查某个元素是否不包含在指定的序列中
list列表
从形式上看,列表会将所有元素都放在一对中括号[ ]里面,相邻元素之间用逗号分隔
list = [ele1,ele2,…..,elen]
格式中,ele1 ~ elen 表示列表中的元素,个数没有限制,只要是 Python 支持的数据类型就可以。
从内容上看,列表可以存储整数、小数、字符串、列表、元组等任何类型的数据,并且同一个列表中元素的类型也可以不同
注意:在使用列表时,虽然可以将不同类型的数据放入到同一个列表中,但通常情况下不这么做,同一列表中只放入同一类型的数据,这样可以提高程序的可读性
创建列表
- 使用 [ ] 直接创建列表
listname = [element1 , element2 , element3 , … , elementn]
- 使用 list() 函数创建列表
除了使用[ ]创建列表外,Python 还提供了一个内置的函数 list(),使用它可以将其它数据类型转换为列表类型
访问列表元素
列表是 Python 序列的一种
可以使用索引(Index)访问列表中的某个元素(得到的是一个元素的值)
也可以使用切片访问列表中的一组元素(得到的是一个新的子列表)
删除列表
对于已经创建的列表,如果不再使用,可以使用del关键字将其删除。
实际开发中并不经常使用 del 来删除列表,因为 Python 自带的垃圾回收机制会自动销毁无用的列表,即使开发者不手动删除,Python 也会自动将其回收
del 关键字的语法格式为:
del listname
append()方法添加元素
append() 方法用于在列表的末尾追加元素
语法格式:
listname.append(obj)
当给 append() 方法传递列表或者元组和字符串时,此方法会将它们视为一个整体,作为一个元素添加到列表中,从而形成包含列表和元组的新列表
extend()方法添加元素
extend() 和 append() 的不同之处在于:extend() 不会把列表或者元祖视为一个整体,而是把它们包含的元素逐个添加到列表中
语法格式:
listname.extend(obj)
insert()方法插入元素
语法格式:
listname.insert(index , obj)
index 表示指定位置的索引值。
insert() 会将 obj 插入到 listname 列表第 index 个元素的位置。
当插入列表或者元祖和字符串时,insert() 也会将它们视为一个整体,作为一个元素插入到列表中,这一点和 append() 是一样的
del根据索引值删除元素
del 是 Python 中的关键字,专门用来执行删除操作,它不仅可以删除整个列表,还可以删除列表中的某些元素。
del 可以删除列表中的单个元素
格式为:
del listname[index]
listname 表示列表名称,index 表示元素的索引值。
del 也可以删除中间一段连续的元素
格式为:
del listname[start : end]
start 表示起始索引,end 表示结束索引
del 会删除从索引 start 到 end 之间的元素,不包括 end 位置的元素
pop()根据索引值删除元素
pop() 方法用来删除列表中指定索引处的元素
格式如下:
listname.pop(index)
listname 表示列表名称
index 表示索引值。
如果不写 index 参数,默认会删除列表中的最后一个元素,类似于数据结构中的“出栈”
remove()根据元素值进行删除
remove() 方法会根据元素本身的值来进行删除操作
需要注意的是,remove() 方法只会删除第一个和指定值相同的元素,而且必须保证该元素是存在的,否则会引发 ValueError 错误。
1 | nums = [40, 36, 89, 2, 36, 100, 7] |
clear()删除列表所有元素
1 | list = [1,2,3,4] |
修改单个元素
修改单个元素非常简单,直接对元素赋值即可
list[2] = -26
修改一组元素
Python 支持通过切片语法给一组元素赋值。在进行这种操作时,如果不指定步长(step 参数),Python 就不要求新赋值的元素个数与原来的元素个数相同;这意味,该操作既可以为列表添加元素,也可以为列表删除元素。
添加元素
1 | list = [1,2,3,4] |
删除元素
1 | list = [1,2,3,4] |
list列表查找元素 index() 方法
index() 方法用来查找某个元素在列表中出现的位置(也就是索引),如果该元素不存在,则会导致 ValueError 错误,所以在查找之前最好使用 count() 方法判断一下
语法格式:
listname.index(obj, start, end)
istname 表示列表名称
obj 表示要查找的元素
start 表示起始位置
end 表示结束位置
start 和 end 参数用来指定检索范围
start 和 end 可以都不写,此时会检索整个列表;如果只写 start 不写 end,那么表示检索从 start 到末尾的元素;如果 start 和 end 都写,那么表示检索 start 和 end 之间的元素。
index() 方法会返回元素所在列表中的索引值
1 | nums = [40, 36, 89, 2, 36, 100, 7, -20.5, -999] |
list列表查找元素count()方法
count() 方法用来统计某个元素在列表中出现的次数
语法格式为:
listname.count(obj)
listname 代表列表名,obj 表示要统计的元素
如果 count() 返回 0,就表示列表中不存在该元素,所以 count() 也可以用来判断列表中的某个元素是否存在。
1 | nums = [40, 36, 89, 2, 36, 100, 7, -20.5, 36] |
range()快速初始化数字列表
Python range() 函数能够轻松地生成一系列的数字
1 | for value in range(1,5): |
range() 只是打印数字 1~4,因为range() 函数的用法是:让 Python 从指定的第一个值开始,一直数到指定的第二个值停止,但不包含第二个值(这里为 5)
list实现队列
使用 list 列表模拟队列功能的实现方法是,定义一个 list 变量,存入数据时使用 insert() 方法,设置其第一个参数为 0,即表示每次都从最前面插入数据;读取数据时,使用 pop() 方法,即将队列的最后一个元素弹出。满足先进先出的原则就可以了
1 | queue = [] |
Python list实现栈
使用 list 列表模拟栈功能的实现方法是,使用 append() 方法存入数据;使用 pop() 方法读取数据。append() 方法向 list 中存入数据时,每次都在最后面添加数据,这和前面程序中的 insert() 方法正好相反。满足后进先出就ok
1 | #定义一个空 list 当做栈 |