隐藏

Python 入门 数据结构 list 列表

发布:2023/10/22 21:49:10作者:管理员 来源:本站 浏览次数:436

list 列表和 dict 字典是 Python 最常用的数据结构,其次 tuple 元组,最后 set 集合;set 集合只有一些特殊场景会用到。


列表是一种有序的集合(和数学中的数组类似),其中的元素可以随时添加和删除,是 Python 中最基本的数据结构之一。

一、列表定义


list 列表定义使用中括号 [ ] ,里面元素可以是任意类型,也包括列表本身,也可以是字典、元组等。


list1 = ['Google', 'woodman', 1987, 2017]

list2 = [1, 2, 3, 4, 5 ]

list3 = ["a", "b", "c", "d"]

list4 = [2017, 'A', True, list1, list2]  # 列表中可以嵌套列表,字典,元组等


   注意:列表里面数据可以是任意数据类型,它的长度也是可变的,这就是动态类型好处。


二、访问列表


list 列表(序列)中的每个元素都分配一个数字索引,从 0 开始,第一个索引是 0,第二个索引是 1,依此类推。


我们可以通过索引号访问列表的值,如:


l = ['Google', 'woodman', 1987, 2017]

print('l[0]=', l[0])

print('l[1]=', l[1])

print('l[3]=', l[3])

print('l[-1]=', l[-1])  # 可以倒序访问列表,-1列表倒数第一个

print('l[4]=', l[4])  # 此行会报错,抛出 IndexError 异常,列表下标越界


   注意:访问list时索引号不能越界,不然会抛出 IndexError 异常


三、修改和新增列表的值


我们可以对列表的数据项进行修改。可以直接通过索引号修改列表的值,也可以通过 append() 方法对列表增加值。


l = ['Google', 'woodman', 1987, 2017]

print('原列表', l)


# 修改列表第二个值

l[1] = '中国人'

print('修改后的列表', l)


# 在列表的末尾追加值

l.append('末尾追加元素')

print('新增值后的列表', l)


拓展:


可以使用 insert ( index , vaule ) 方法在列表指定位置插入值,它接受两个参数,第一个参数为索引号,第二个参数是待添加的新元素。( insert () 方法很少用到,知道有这个东西就可以,重点在 append ( ) 末尾追加)


示例:


# 在第二个位置插入,插入后 后面元素向后移一位

l.insert(1, '知乎')

print(l)


四、删除元素


删除元素的方法有del、 pop ( )、remove () , 最常用到的是pop ( ),其次remove ( ),最后才是del。


del 、 pop ( )、remove ( ) 他们之间存在明显的区别,


1、del 通过指定具体值删除


del 是 Python 内置用于删除变量的引用(如果比较难理解,你可认为他是删除变量),list列表中的值其实都是一个一个的变量如list[0]、list[1]、list[2]都是他们的变量名。


我们要删除一个变量,直接 【del 变量名】,之后引用变量就会抛出异常。


a=1

del a    # 删除变量a,解除a对1的引用

print(a) #  出现NameError 异常,没有a这个变量


l = ['Google', 'woodman', 1987, 2017]

print(l)


del l[0]  # 删除列表第一个元素

print(l)  # 输出 ['woodman', 1987, 2017]


del l[0:2]  # 删除列表第一到第二个元素

print(l)

del l  # 删除整个列表

print(l)  # 列表无法访问,抛出 NameError ,提示无l这个变量


2、pop ( ) 通过索引号删除


l.pop ( 索引号 ) 是 list 内置方法,通过列表索引号来删除list元素的方法;不指定索引号时删除最后一个元素。pop ( ) 一次只能删除一个元素。


l = ['Google', 'woodman', 1987, 2017]

l.pop()  # 删除最后一个元素

print(l)  # 输出 ['Google', 'woodman', 1987]

l.pop(0)  # 删除列表第一个元素

print(l)  # 输出 ['woodman', 1987]


l1 = [1]  # 定义一个新列表,只有一个值

print(l1)  # 输出 [1]

l1.pop()  # 删除列表的值

print(l1)  # 输出的是一个空列表,l1 列表还存在


3、remove ( ) 删除首个符合条件的元素


l.remove ( ) 列表内置的方法,他是根据给定值查找列表,找到符合条件的第一个值删除,它也只能一次删除一个。


l = ['Google', 'woodman', 1987, 2017, 1987, 'woodman']

print(l)

l.remove(1987)  # 删除 1987

print(l)  # 注意观察值的变化,只删除了前一个 1987


l.remove('woodman')  # 删除 ‘woodman’

print(l)  # 输出 ['Google', 2017, 1987, 'woodman']


l.remove(2)  # 删除不存在的值会抛出 ValueError 异常


五、列表切片


列表切片和字符串切片差不多,可以分为以下几类。


1、获取多个元素的值


list[初始位置:结束位置]。


如:list[0:N],取前N个元素也就是索引为0-(N-1)的元素,从0开始取到list的索引号N-1为止,不包含索引号为N的元素。


l = ['Google', 'woodman', 1987, 2017, 'a', 1, 2, 3]

print(l[0:2])  # 第1到第2个

print(l[2:15])  # 2到15个,注意如果结束位超过列表长度不会报错


2、通过步长截取


list[初始位置:结束位置:步长] , 步长表示每多少个取一个。


如:list[0:N:M] 从0开每M个数取一个直到list的N-1元素为止。


l = ['Google', 'woodman', 1987, 2017, 'a', 1, 2, 3]

print(l[0:4:2])  # 每2个数去1个,从第1到第4个

# 输出 ['Google', 1987]

print(l[2::3])  # 从第3个取,每3个取一个,取到结尾

# 输出  [1987, 1]


3、花式用法


l = ['Google', 'woodman', 1987, 2017, 'a', 1, 2, 3]

print(l[:3])  # 从开始到list第3个元素

print(l[1:])  # 从第二个到list结束

print(l[:])  # 获得一个与l相同的list

print(l[-1])  # 取倒数第一个元素

print(l[::-1])  # list倒叙

print(l[-3:-1])  # 倒数第三个到第二个

print(l[-4:-1:2])  # 从倒数第4个每2个取一个,到代数第二个


六、列表常用运算


1、+ 与 * 列表的算术运算


链接两个列表使用 + , 重复复制多个列表使用 * 。


示例:链接列表和重复复制


l1 = [1, 2, 3] + ['a', 'b', 'c']  # 连接

print(l1)   # 结果 [1, 2, 3, 'a', 'b', 'c']


l2 = ['Hello!'] * 3  # 重复复制

print(l2)  # 结果 ['Hello!', 'Hello!', 'Hello!']


2、in 成员运算


in 判断一个元素是否在列表中,存在返回 True,否则返回 False。


not in 与 in 相反,判断一个元素不存在列表中。


示例:


l1 = [1, 2, 3, 'a', 'b', 'c']

print(2 in l1)  # True

print(12 in l1)  # False

print(2 not in l1)  # False

print(12 not in l1)  # True


七、list 列表常用函数


len( list ) 返回列表的长度


max( list ) 返回列表中元素最大值,必须是相同类型对比


min( list ) 返回列表元素最小值,必须是相同类型对比


list( tuple ) 将元组转换为列表


l = ['Google', 'woodman', 1987, 2017, 'a', 1, 2, 3]

print(len(l))  # 列表元素个数

l1 = ['aA', 'bss', 'Ad']

print(max(l1))  # 返回列表元素最大值,l1列表值必须是同类型

l2 = [6, 2, 3, 5, 1]

print(min(l1))  # 返回列表元素最小值,l1列表值必须是同类型

t = (1987, 2017, 'a', 1, 2, 3)

print(list(t))  # 将元组转换为列表


八、list列表常用方法


   list.append(obj) #在列表末尾添加新的对象list.count(obj) #统计某个元素在列表中出现的次数list.extend(seq) #在列表末尾一次性追加另一个序列中的多个值list.index(obj) #从列表中找出第一个匹配项的索引位置list.insert(index, obj) #将对象插入列表index位置list.pop(obj=list[-1]) #移除列表中的一个元素(默认最后一个),返回移除值list.remove(obj) #移除列表中的第一个匹配到的值list.reverse() #反向列表中元素list.sort([func]) #对原列表进行排序list.clear() #清空列表list.copy() #复制列表


注意:Python 一切皆对象,变量是对象,函数式对象,方法是对象,类是对象,他的一切都是对象


l = ['Google', 'woodman', 1987, 2017, 'a', 1, 2, 3]

l1 = [7, 8, 9]


l.append('a')  # 在列表末尾添加新的对象

print(l)

print(l.count('a'))  # 统计某个元素在列表中出现的次数


l.extend(l1)  # 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)

print(l)


l.index(1987)  # 从列表中找出某个值第一个匹配项的索引位置

print(l)


l.insert(2, 'woodman')  # 将对象插入列表

print(l)


l.pop()  # 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值

print(l)


l.remove('a')  # 移除列表中某个值的第一个匹配项


l.reverse()  # 反向列表中元素

print(l)


l2 = l.copy()  # 复制列表

print(l2)


l.clear()  # 清空列表

print(l)


l3 = [3, 4, 2, 9, 4]

l3.sort()  # 对原列表进行排序

print(l3)