列表的特点
- 有序性:列表中的元素按照添加的顺序进行存储,每个元素都有一个对应的索引,可以通过索引访问和操作列表中的元素。
- 可变性:列表是可变的,也就是说可以通过索引来修改、删除或插入元素。可以改变列表的长度、内容和顺序。
- 可存储不同类型的元素:列表中可以同时存储不同类型的数据,例如整数、字符串、浮点数、布尔值等。甚至可以存储其他列表或其他复杂的数据结构。
由于列表的有序性、可变性和多样化的数据类型,它是一种非常常用和灵活的数据结构,常用于存储和处理一组相关的数据。列表提供了丰富的方法和操作,使得对数据的管理和处理变得更加方便和高效。
列表的定义
1.构造方法list()
可通过列表的构造方法定义列表。 当使用构造方法定义列表时,参数只能是可迭代的对象,构造方法会将参数中的元素构造成为列表的元素。 可以理解为将可迭代的对象强制类型转换为列表。
li = list("howa")
print(type(li), li)
2.中括号填充元素
li2 = [1, 2, 3]
li3 = ['howawrts', 'hello']
li4 = [1, 2, 3, 'howarts', [5, 6, 7]]
print(li2)
print(li3)
print(li4)
3.列表推导式
li5 = [i for i in range(1, 10) if i%2 == 0]
print(type(li5), li5)
列表使用:索引
列表同字符串,元组一样,也可以使用下标形式引用列表中的元素。并且,下标不能超过列表的元素个数减1,否则会抛出下标越界错误。
li5 = [i for i in range(1, 10) if i%2 == 0]
# 1.正向索引,默认,编号从0开始
print(li5[0])
# 2.反向索引,编号从-1开始
print(li5[-1])
列表中元素的修改
由于列表的可变特性,可以通过下标的方式,对列表中的元素进行修改。
l = [1,2,3,4,5]
l[0] = 111
l[3] = 444
列表使用:切片[start: stop: step]
列表的切片操作同字符串,元组一致
- start值:指示开始索引值,如果没有指定,则默认开始值为0
- stop值:指示到哪个索引值结束,但不包括这个结束索引值。如果没有指定,则取列表允许的最大索引值
- step值:步长值指示每一步大小,如果没有指定,则默认步长值为1
- 三个值都是可选,非必填
li6 = ['h', 'o', 'g', 'w', 'a', 'r', 't', 's']
print(li6[0:5:2])
print(li6[2:4])
print(li6[:4])
print(li6[2:])
print(li6[::2])
print(li6[::-1])
列表使用:运算符
1.*号:重复
2.+号:合并
列表使用:成员检测
# 1.in
li7 = [1, 2, 3]
print(1 in li7)
# 2.not in
print(100 in li7)
列表方法
-
append(item)
:将一个对象item添加到列表的末尾,入参:对象item,返回:None -
extend(iterable)
:将一个可迭代对象的元素依次添加到列表最后
li8 = []
li8.append(1)
li8.append("yuanzhong")
print(len(li8), li8)
# extend(iterable)
li8.extend('hello')
print(len(li8), li8)
li9 = ['a', 'b', 'c']
li8.extend(li9)
print(len(li8), li8)
-
insert(index, item)
:将一个对象插入到指定的索引位置,入参:索引值index,一个对象item;返回:None;元索引位置及后面的元素后移一位
li10 = ['0', '1', '2']
print('插入前:', li10) # 插入前: ['0', '1', '2']
li10.insert(0, 'myz')
# 插入后: ['myz', '0', '1', '2']
print("插入后:", li10)
pop()
-
pop(index)
或者pop()
:弹出并返回所指定索引的元素。 - 入参:索引值index,可不传;
- 返回:指定索引的元素
- 返回:未指定索引则返回末尾元素
- 如果索引值不正确,或者列表已经为空,则引发IndexError错误
li11 = ['h', 'o', 'g', 'w', 'a', 'r', 't', 's']
li11.pop(1)
# ['h', 'g', 'w', 'a', 'r', 't', 's']
print(li11)
li11.pop()
# ['h', 'g', 'w', 'a', 'r', 't']
print(li11)
# remove(item)
li11.remove('g')
print(li11)
remove(item)
: 在列表中删除第一个指定的数据,如果删除的数据不存在则抛出错误
clear()
清空列表
l = [1,2,3,4,5,1,2,3]
l.clear()
print(l)
sort(key=None, reverse=False)
- 对列表进行原地排序,只使用<来进行各项间比较
- 入参:支持2个关键字参数;key:指定带有一个参数的函数,用于从每个列表元素中提取比较键;reverse:默认值为false表示升序,为true表示降序
- 返回:None
li12 = [1, 2, 3, 4, 8, 7]
li12.sort()
print(li12)
li13 = ['python', 'java', 'Go', 'R']
li13.sort(key=len)
print(li13)
reverse()
- 将列表中的元素顺序反转;反转只是针对索引值,元素之间不相互比较
- 参数:无
- 返回:None
li14 = ['a', 'b', 'c']
li14.reverse()
print(li14)
列表嵌套
- 嵌套列表是指在列表里存放列表
- 列表的常用方法都适用于嵌套列表
li15 = [[1, 2, 3], ['a', 'b', 'c']]
print(li15)
print(li15[1])
print(li15[1][2])
li15[1].append('d')
print(li15)
列表推导式
- 列表推导式是指循环创建列表,相当于for循环创建列表的简化版
- 语法:[x for x in li if x …]
- 实例:将1-10中的所有偶数平方后组成新的列表
1、传统解决方案,for循环
result = []
for ele in range(1, 11):
if ele % 2 == 0:
result.append(ele ** 2)
print(result)
2、使用列表推导式
result = [ ele ** 2 for ele in range(1, 11) if ele % 2 == 0]
print(result)
列表的用途
列表在Python中具有广泛的用途,主要包括以下几个方面:
- 存储一组相关的数据:列表是一种有序的数据结构,可以用于存储一组相关的数据,如学生的成绩、员工的信息、商品的价格等。通过将相关的数据放入列表中,可以方便地进行统一的管理和处理。
- 数据的容器:列表提供了便捷的操作方法,可以进行遍历、搜索、插入和删除等操作。通过索引,可以访问列表中的特定元素;通过遍历,可以逐个处理列表中的元素;通过方法,可以在列表中插入新元素、删除指定元素等。
- 算法和数据结构中的应用:列表是一种重要的数据结构,广泛应用于算法和数据结构的实现中。例如,列表可以用于实现栈(Stack)、队列(Queue)、链表(LinkedList)等数据结构,还可以用于排序算法、搜索算法等的实现。
总之,列表在Python中是一种基础且功能强大的数据结构,用途广泛,可以满足各种不同场景下的数据管理和处理需求。