列表(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 支持的数据类型就可以。
从内容上看,列表可以存储整数、小数、字符串、列表、元组等任何类型的数据,并且同一个列表中元素的类型也可以不同
注意:在使用列表时,虽然可以将不同类型的数据放入到同一个列表中,但通常情况下不这么做,同一列表中只放入同一类型的数据,这样可以提高程序的可读性

创建列表
  1. 使用 [ ] 直接创建列表

listname = [element1 , element2 , element3 , … , elementn]

  1. 使用 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
2
3
nums = [40, 36, 89, 2, 36, 100, 7]
nums.remove(36)
print(nums)
clear()删除列表所有元素
1
2
3
4
list = [1,2,3,4]
print(list[1:4])
list.clear()
print(list)
修改单个元素

修改单个元素非常简单,直接对元素赋值即可
list[2] = -26

修改一组元素

Python 支持通过切片语法给一组元素赋值。在进行这种操作时,如果不指定步长(step 参数),Python 就不要求新赋值的元素个数与原来的元素个数相同;这意味,该操作既可以为列表添加元素,也可以为列表删除元素。
添加元素

1
2
3
list = [1,2,3,4]
list[0:2]= [5,6]
print(list)

删除元素

1
2
3
list = [1,2,3,4]
list[0:2]= []
print(list)
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
2
3
nums = [40, 36, 89, 2, 36, 100, 7, -20.5, -999]
print( nums.index(2) )
print( nums.index(100, 3, 7) )
list列表查找元素count()方法

count() 方法用来统计某个元素在列表中出现的次数
语法格式为:
listname.count(obj)

listname 代表列表名,obj 表示要统计的元素
如果 count() 返回 0,就表示列表中不存在该元素,所以 count() 也可以用来判断列表中的某个元素是否存在。

1
2
3
4
5
6
nums = [40, 36, 89, 2, 36, 100, 7, -20.5, 36]
print("36出现了%d次" % nums.count(36))
if nums.count(100):
print("列表中存在100这个元素")
else:
print("列表中不存在100这个元素")
range()快速初始化数字列表

Python range() 函数能够轻松地生成一系列的数字

1
2
for value in range(1,5):
print(value)

range() 只是打印数字 1~4,因为range() 函数的用法是:让 Python 从指定的第一个值开始,一直数到指定的第二个值停止,但不包含第二个值(这里为 5)

list实现队列

使用 list 列表模拟队列功能的实现方法是,定义一个 list 变量,存入数据时使用 insert() 方法,设置其第一个参数为 0,即表示每次都从最前面插入数据;读取数据时,使用 pop() 方法,即将队列的最后一个元素弹出。满足先进先出的原则就可以了

1
2
3
4
5
6
7
8
queue = []
queue.insert(0,1)
queue.insert(0,2)
queue.insert(0,"hello")
print(queue)
print("取一个元素:",queue.pop())
print("取一个元素:",queue.pop())
print("取一个元素:",queue.pop())
Python list实现栈

使用 list 列表模拟栈功能的实现方法是,使用 append() 方法存入数据;使用 pop() 方法读取数据。append() 方法向 list 中存入数据时,每次都在最后面添加数据,这和前面程序中的 insert() 方法正好相反。满足后进先出就ok

1
2
3
4
5
6
7
8
9
#定义一个空 list 当做栈
stack = []
stack.append(1)
stack.append(2)
stack.append("hello")
print(stack)
print("取一个元素:",stack.pop())
print("取一个元素:",stack.pop())
print("取一个元素:",stack.pop())