数据结构-列表与元组

前序:
列表和元组都是python中的数据结构,最近一直在学习python,就想记录一下一些知识。

先分别来介绍两种数据结构,再来比较两者的相同点和不同点
1. 列表和元组可以保存任意数量的任意类型的python对象
2. 可以使用下标来访问元素
3. 可以使用[:]切片规则来得到想要的子集

列表

符号
列表使用 [ ] 来嵌套它所包含的对象。

#可以是任意类型的对象
>>>obj = [123,456,'王五']

支持下标的随机访问

>>>a = [1,2,3,4,5,6,7,8,9]
>>>a[0] = 1
>>># -1代表最后一个元素,这个用起来很方便
>>>a[-1] = 9

切片操作

list[start_index:end_index:step_index]
start_index:起始位置
end_index:结束位置(python里都是前闭后开区间,所以不包括结束位置)
step_indx:每次的步长(可以不提供,但是不能为0,否则报ValueError)

下面是实例:

#代表列表中的每个数
>>>a[:]

>>>a = [0,1,2,3,4,5,6,7,8,9]
>>>#从下标为1的元素开始,一直到最后一个元素
>>>>a[1:]
>>>[1,2,3,4,5,6,7,8,9]

>>>#从下标为1的元素开始,到下标为8的元素(不包括下标为8的元素)
>>>a[4:8]
>>>[1,2,3,4,5,6,7]

>>>#从下标为1开始,到下标为8,两个元素为一个步长
>>>a[1:8:2]
>>>[1,3,5,7]

列表的对象方法(列表内置的一些操作)

list.append(x)
将一个元素添加到列表的结尾,相当于a[len(a):] = [x]

list.extend(L)
将一个给定列表中的所有元素都添加到另一个列表中,即a[len(a):] = L

list.insert(i,x)
在指定位置插入一个元素,第一个参数为索引
插入第一个:a.insert(0,x)
a.insert(len(a),x)相当于a.append(x)

list.remove(x)
删除列表中值为x的第一个元素,如果该元素不存在,则返回错误

list.pop(i)
从指定位置删除元素,并将其返回,如果没有指定索引,则a.pop()返回最后一个元素

list.clear()
从列表中删除所有元素,即del a[:]

list index(x)
返回列表中第一个值为x的元素的索引,如果没有匹配的则返回一个错误

list.count(x)
返回x在列表中出现的次数

list.sort()
对元素进行排序

list.reverse()
元素逆置

list.copy()
返回列表的一个浅拷贝,即a[:]

列表可以当堆栈和队列使用,调用相应的操作即可
要实现队列,可以调用clooections.deque:为在首尾两端快速插入和删除而设计

列表推导式

生成一个列表,里面包含1-9的平方

普通做法

扫描二维码关注公众号,回复: 2492663 查看本文章
# 注意这里的x变量在循环完毕后依然存在
s = []
for x in range(10)
    s.append(x)

高阶做法

#无副作用的计算值
#这里使用到了高阶函数map(映射)
s = list(map(lambda x : x ** 2,range(5))
或者 s = [x ** 2 for x in range(5)]

>>>[0,1,4,9,16]

列表生成式的表达式构成:
一个包含表达式的括号组成,表达式后跟随一个for子句,之后可以跟零个或多个for或if子句,结果是一个列表

如上面的生成式,加上if判断

s = list[x ** 2 for x in range(5) if x > 2]
>>>[9,16]

del语句

按给定的索引值而不是值来删除子项。
不同于pop函数:
1、pop函数具有返回值
2、del可以从列表中删除切片或清空整个列表

del a[0]    #删除索引为0的元素
del a[2:5]  #删除下标2到5的元素(前闭后开)
del a[:]    #删除列表中所有元素

#还可以删除整个变量
del a

元组

创建一个元组

#输入时()可有可无
>>>t = 123,'tuple'
#输出时会自动加上(),以正确表达嵌套结构
>>>(123,'tuple'

在创建包含零个或一个元素的元组时需要注意

  • 创建空元组使用 ()
  • 创建一个元素的元素 t = 123,在变量后加一个逗号,从而区分这是含有一个元素的元组。否则直接写t = 123或者t = (123)都有歧义

元组的封装与分拆
封装:t = 123,456,'tuple' 将三个元素封装成一个元组
拆分:x,y,z = t分别将三个元素赋值给三个变量

列表与元组的对比

相同点:

  1. 可以保存任意数量,任意类型的python对象
  2. 可以使用下标来访问元素
  3. 可以使用[:]切片规则来得到想要的子集

不同点:

  1. 元组支持的对象方法只有tuple.count(x)和tuple.index(x)
  2. 元组是不可变的,而列表是可变的

猜你喜欢

转载自blog.csdn.net/qq_36528114/article/details/80745145