Python系列-列表&元组
🌈个人主页: 会编程的果子君
💫个人格言:“成为自己未来的主人~”
目录
列表是什么,元组是什么
编程中,经常需要使用变量,来保存/表示数据
如果代码中需要表示的数据个数比较少,我们直接创建多个变量即可
num1=10
num2=20
num3=30
但是有的时候,代码中需要表示的数据特别多,甚至也不知道要表示多少个数据。这个时候,就需要用到列表。
列表是一种让程序员在代码中批量表示/保存数据的方式
元组和列表相比,是非常相似的,只是列表中放哪些元素可以修改调整,元组中放的元素是创建元组的时候就设定好的,不能修改调整
列表是散装的,元组是包装的
创建列表
创建列表主要有两种方式,[ ]表示一个空的列表
# 1
alist=[]
# 2
alist=list()
print(type(alist))
如果需要往里面设置初始值,可以直接写在[ ]里
可以直接使用 print 函数来打印 list 中的元素内容
alist=[1,2,3,4]
print(alist)
列表中存放的元素允许是不同的类型(这一点和C++/Java差别较大)
alist=[1,'a',True]
print(alist)
因为 list 本身是Python中的关键函数,不宜再使用 list 作为变量名,因此命名为alist
访问下标
可以通过下标访问操作符[ ]来获取到列表中的任意元素
我们把[ ]中填写的数字,称为下标或者索引
alist=[1,2,3,4]
alist[2]=100
print(alist)
下标是从0开始计数的,因此下标为2,则对应着3这个元素
通过下标不光能读取元素内容,还能修改元素的值
如果下标超出列表的元素范围,就会出现异常
alist=[1,2,3,4]
print(alist[100])
如果下标是从0开始的,因此下标的有效范围是【0,列表长度-1】,使用 len 函数 可以获取到列表的元素个数
alist=[1,2,3,4]
print(len(alist))
下标可以取负数,表示倒数第几个元素
alist=[1,2,3,4,5]
print(alist[3])
print(alist[-1])
切片操作
通过下标操作是一次取出里面的第一个元素
通过切片,则是一次取出一组连续的元素,相当于得到一个子列表
使用 [ : ] 的方式进行切片操作
alist=[1,2,3,4,5]
print(alist[1:3])
alist[ 1 : 3 ] 中的 1 : 3 表示的是 [ 1 , 3 ) 这样的由下标构成的前闭后开区间
也就是从下标为1的元素开始(2),到下标为3的元素结束,但是不包含下标为3的元素,所以最终的结果是2,3
切片操作中可以省略前后边界
alist=[1,2,3,4,5]
print(alist[:3])
print(alist[1:])
print(alist[ : ])
切片操作还能指定“步长”,也就是“每访问一个元素后,下标自增几步”
alist=[1,2,3,4,5,6,7,8,9,10]
print(alist[::1])
print(alist[::2])
print(alist[::3])
print(alist[::5])
如果切片中填写的数字越界了,不会有负面效果,只会尽可能地把满足条件的元素找出来
alist=[1,2,3,4]
print(alist[100:200])
遍历列表元素
“遍历”指的是把元素一个一个的取出来,再分别进行处理
最简单的方法就是使用for循环
alist=[1,2,3,4]
for elem in alist:
print(elem)
也可以使用for 按照范围生成下标,按下标访问
alist=[1,2,3,4]
for i in range(0,len(alist)):
print(alist[i])
还可以使用while循环,手动控制下标的变化
alist=[1,2,3,4]
i=0
while i<len(alist):
print(alist[i])
i+=1
新增元素
使用 append 方法,向列表末尾插入一个元素(尾插)
alist=[1,2,3,4]
alist.append('hello')
print(alist)
使用 insert 方法,向任意位置插入一个元素
insert第一个参数表示要插入元素的下标
alist=[1,2,3,4]
alist.insert(1,'hello')
print(alist)
什么是方法,方法其实就是函数,只不过函数是独立存在的,而方法往往要依附于某个“对象”
像上述代码alist.append append方法就必须依附于alist
查找元素
使用 in 操作符,判定元素是否在列表中存在,返回值是布尔类型
alist=[1,2,3,4]
print(2 in alist)
print(5 in alist)
使用 index 方法,查找元素在列表中下标,返回值是一个整数,如果元素不存在,则会抛出异常
alist=[1,2,3,4,5]
print(alist.index(2))
print(alist.index(10))
删除元素
使用 pop 方法删除最末尾元素
alist=[1,2,3,4]
alist.pop()
print(alist)
pop也能按照下标来删除元素
alist=[1,2,3,4]
alist.pop(2)
print(alist)
使用 remove 方法,按照值删除元素
alist=[1,2,3,4]
alist.remove(2)
print(alist)
连接列表
使用 + 能够把两个列表拼接在一起
此处的 + 结果会生成一个新的列表,而不会影响到旧列表的内容
alist=[1,2,3,4]
blist=[5,6,7]
print(alist+blist)
使用 extend 方法,相当于把一个列表拼接到另一个列表的后面
a.extend(b) 是把b中的内容拼接到a的末尾,不会修改b,但是会改动a
alist=[1,2,3,4]
blist=[5,6,7]
alist.extend(blist)
print(alist)
print(blist)
关于元组
元组的功能和列表相比,是基本一致的
元组使用()来表示
atuple=()
atuple=tuple()
元组不能修改里面的元素,列表则可以修改里面的元素
因此,像读操作,比如访问下标,切片,遍历,in ,index,+等,元组也是一样支持的
但是,像写操作,比如修改元素,新增元素,删除元素,extend等,元组则不能支持
另外,元组在Python中很多时候默认是集合类型,例如,当一个函数返回多个值的时候
def getpoint():
return 10,20
result=getpoint()
print(type(result))
此处的result的类型,其实是元组
问题来了,既然已经有了列表,为啥还需要有元组
元组相当于列表来说,优势有两个方面:
你有一个列表,现在需要调用一个函数进行一些处理,但是你不是特别确认这个函数是否会把你的列表数据弄乱,那么这时候传一个元组就安全很多。
我们马上要讲的字典,是一个键值对结构,要求字典的键必须是“可hash对象”(字典本质上也是一个hash表),而一个可hash对象的前提就是不可变,因此元组可以作为字典的键,但是列表不行。