Python测开28期 - 旎奥 - 学习笔记 - python基础 - 数据类型:列表

列表的特点

  • 有序性:列表中的元素按照添加的顺序进行存储,每个元素都有一个对应的索引,可以通过索引访问和操作列表中的元素。
  • 可变性:列表是可变的,也就是说可以通过索引来修改、删除或插入元素。可以改变列表的长度、内容和顺序。
  • 可存储不同类型的元素:列表中可以同时存储不同类型的数据,例如整数、字符串、浮点数、布尔值等。甚至可以存储其他列表或其他复杂的数据结构。

由于列表的有序性、可变性和多样化的数据类型,它是一种非常常用和灵活的数据结构,常用于存储和处理一组相关的数据。列表提供了丰富的方法和操作,使得对数据的管理和处理变得更加方便和高效。

列表的定义

1.构造方法list()

可通过列表的构造方法定义列表。 当使用构造方法定义列表时,参数只能是可迭代的对象,构造方法会将参数中的元素构造成为列表的元素。 可以理解为将可迭代的对象强制类型转换为列表。

li = list("howa")
print(type(li), li)

image

2.中括号填充元素

li2 = [1, 2, 3]
li3 = ['howawrts', 'hello']
li4 = [1, 2, 3, 'howarts', [5, 6, 7]]
print(li2)
print(li3)
print(li4)

image

3.列表推导式

li5 = [i for i in range(1, 10) if i%2 == 0]
print(type(li5), li5)

image

列表使用:索引

列表同字符串,元组一样,也可以使用下标形式引用列表中的元素。并且,下标不能超过列表的元素个数减1,否则会抛出下标越界错误。

li5 = [i for i in range(1, 10) if i%2 == 0]
# 1.正向索引,默认,编号从0开始
print(li5[0])
# 2.反向索引,编号从-1开始
print(li5[-1])

image

列表中元素的修改

由于列表的可变特性,可以通过下标的方式,对列表中的元素进行修改。

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)

image

列表方法

  • 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)

image

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)

image

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)

image

reverse()

  • 将列表中的元素顺序反转;反转只是针对索引值,元素之间不相互比较
  • 参数:无
  • 返回:None
li14 = ['a', 'b', 'c']
li14.reverse()
print(li14)

image

列表嵌套

  • 嵌套列表是指在列表里存放列表
  • 列表的常用方法都适用于嵌套列表
li15 = [[1, 2, 3], ['a', 'b', 'c']]
print(li15)
print(li15[1])
print(li15[1][2])
li15[1].append('d')
print(li15)

image

列表推导式

  • 列表推导式是指循环创建列表,相当于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)

image

列表的用途

列表在Python中具有广泛的用途,主要包括以下几个方面:

  • 存储一组相关的数据:列表是一种有序的数据结构,可以用于存储一组相关的数据,如学生的成绩、员工的信息、商品的价格等。通过将相关的数据放入列表中,可以方便地进行统一的管理和处理。
  • 数据的容器:列表提供了便捷的操作方法,可以进行遍历、搜索、插入和删除等操作。通过索引,可以访问列表中的特定元素;通过遍历,可以逐个处理列表中的元素;通过方法,可以在列表中插入新元素、删除指定元素等。
  • 算法和数据结构中的应用:列表是一种重要的数据结构,广泛应用于算法和数据结构的实现中。例如,列表可以用于实现栈(Stack)、队列(Queue)、链表(LinkedList)等数据结构,还可以用于排序算法、搜索算法等的实现。

总之,列表在Python中是一种基础且功能强大的数据结构,用途广泛,可以满足各种不同场景下的数据管理和处理需求。