Python基础-11 容器——列表

十一、容器——列表

1. 概念

- 列表

  • List(列表) 是 Python 中使用 最频繁 的数据类型,在其他语言中通常叫做 数组

  • 列表:用于存储任意数目、任意类型的数据集合。

由于 Python3 中一切皆对象,在内存中实际是按照如下方式存储的: a = [10,20,30,40]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8HK6RUVr-1610113536687)(Media/image-20201230183230732.png)]

- 特点

  • 与其他语言不同,Python的列表是大小可变的

- 定义格式

  1. 变量名 = [值1, 值2, …]
cl = [] # 空列表
cl = [1,2,3]
cl = [i for i in range(10)]
cl = [i*2 for i in range(10)]  # [2, 4, 6...]
  1. 变量名 = list(值)
    • 可以将任何可迭代对象转换成列表
cl1 = list() # 空列表
cl2 = list(listA) #类型转换

cl3 = list(range(10))

cl4 = list('hello') # ['h', 'e', 'l', 'l', 'o'] 将字符串自动拆分

list()可以接收元组、字符串、其他序列类型、迭代器等生成列表。

- 应用场景

  • 尽管 Python列表 中可以 存储不同类型的数据
  • 但是在开发中,更多的应用场景是
    1. 列表 存储相同类型的数据
    2. 通过 迭代遍历,在循环体内部,针对列表中的每一项元素,执行相同的操作

2. 下标访问

同字符串

注意:从列表中取值时,如果 超出索引范围,程序会报错

3. 遍历

同字符串或元组

4. 嵌套列表定义和遍历

cl3=[1,2,3,(4,5,6),'hello',['a','b','c']]
print(cl3)

for v in cl3:
    if isinstance(v,tuple) or isinstance(v,list):
        for i in v:
            print(i)
    else:
        print(v)

5. 排序和逆序

  • sort():默认升序,按字母表顺序,改变原来列表

  • sort(reverse=True):降序排序,改变原来列表

  • reverse():逆序,改变原来列表

  • sorted():排序,返回新的列表【了解】

  • reversed():逆序,返回新的列表

实现

# 实现列表的逆序(有返回值)
cl = list('hello')
print(cl)

def rev_list(cl):
    i = len(cl)-1
    rel=[]
    while i>=0:
        rel.append(cl[i])
        i-=1
    return rel

print(rev_list(cl))
# 实现列表的逆序(无返回值,同reverse())
def reverse_list(cl):
    length = len(cl)
    index_start = length // 2-1
    for i in range(0,index_start+1):
        temp = cl[i]
        cl[i]=cl[length -1-i]
        cl[length -1-i]=temp

cl = list('01234')
print(cl)
reverse_list(cl)
print(cl)


6. 常用方法

增:

append()
extend()
insert()

关键字 / 函数 / 方法说明
append(数据)在末尾追加数据【如果传入的是一个列表,则整个列表会被当作一个元素(二维列表)】
列表1.extend(列表2)将列表2 的数据追加到列表1
insert(索引, 数据)在指定位置插入数据,改位置及之后元素整体后移
插入时,没有下表越界问题,当制定下标超过范围,相当于追加在最后位置

- 效率问题

  • append()方法:原地修改列表对象,是真正的列表尾部添加新的元素
    • 速度最快,推荐使用。
  • +运算符操作 :并不是真正的尾部添加元素,而是创建新的列表对象
    • 将原列表的元素和新列表的元素依次 复制到新的列表对象中。这样,会涉及大量的复制操作,对于操作大量元素不建议使用。
  • extend()方法:将目标列表的所有元素添加到本列表的尾部,
    • 属于原地操作,不创建新的列表对象。
  • insert()插入元素 使用 insert()方法可以将指定的元素插入到列表对象的任意制定位置。
    • 这样会让插入位置后 面所有的元素进行移动,会影响处理速度。
    • 涉及大量元素时,尽量避免使用。
    • 类似发生这种 移动的函数还有:remove()、pop()、del()
  • 乘法扩展:使用乘法扩展列表,生成一个新列表,新列表元素时原列表元素的多次重复。

删:

关键字 / 函数 / 方法说明
pop()默认删除末尾数据
pop(索引)删除指定索引数据
并返回该元素
remove(数据)删除第一个出现的指定数据,有多个相同对象,只删除第一个
若不存在该元素抛出异常。
clear清空列表,但列表存在
del listA[i]删除指定索引的数据【关键字
del listA删除整个列表【关键字
del(listA[i])删除指定索引的数据【函数
del(listA)删除整个列表【函数

注:【重要

  • 不要在循环遍历时删除元素

- 删除元素的本质

删除列表指定位置的元素。
a = [100,200,888,300,400]
del a[1]
a  # [100,200,300,400]

本质是依次将后一个元素拷贝至前一个,打到删除的效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V2jfu9bB-1610113536692)(Media/image-20201230191356775.png)]

- 插入元素的本质

依次将改位置元素后移,并在之后赋值该位置元素新的值

改:

下标修改

cl = [1,2,3]
cl[2] = 11 # [1,11,3]

查:

index()
count()
in:(掌握)
not in

关键字 / 函数 / 方法说明
len(列表)列表长度【函数**】
列表.index(数据)数据在列表中的位置(索引)
列表.count(数据)数据在列表中出现的次数
元素 in listA某元素是否在列表中【常用】【关键字
元素 not in listA某元素是否不在列表中【关键字

7. 列表的应用:

- 拆分字符串

s = 'hello'
cl = list(s)  # ['h', 'e', 'l', 'l', 'o']

- 复制列表所有元素到新列表对象

list1 = [30,40,50]
list2 = list1

8. 列表推导式——(创建列表)

- 列表推导式

通过表达式和循环,批量创建列表元素

格式

列表变量 = [表达式 for 变量 in range(10)]
# 表达式中包含后面的变量
列表变量 = [表达式 for item in 可迭代对象 if 条件判断]

注意

  • 表达式中必须包含后面的变量
  • 列表推导式生成元素全部在内存中,比较占资源
  • 列表生成式则是用一个生成一个,节省资源

eg.

# 创建有100个数字的推导式
# 方式一
cl=[]
for i in range(100):
    cl.append(i)
print(cl)

# 方式二,列表推导式
cl = [i for i in range(100)]
print(cl)
cl = [i*2 for i in range(100)]
print(cl)  # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20,...

- 在循环过程中使用if

格式

列表变量 = [表达式 for 变量 in range(10) if 判断条件]
# 表达式中包含后面的变量

eg.

# 筛选3的倍数
cl=[i for i in range(1101) if i % 3 == 0]
print(cl)

- 两个for循环

内核:for循环嵌套

注意:

  • 外层执行一次,内层循环一圈

eg.

# 创建一个列表,列表中的每个元素都具有两个值
cl = [(x, y) for x in range(10) for y in range(3)]
print(cl)

*9. 多维列表

- 二维列表

  • 一维列表可以帮助我们存储一维、线性的数据。
  • 二维列表可以帮助我们存储二维、表格的数据。例如下表的数据:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X0e5r3EB-1610113536695)(Media/image-20201230194947796.png)]

a = [
	["高小一",18,30000,"北京"], ["高小二",19,20000,"上海"], ["高小一",20,10000,"深圳"], 
	]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BeRTaQs6-1610113536699)(Media/image-20201230194919289.png)]

- 遍历输出二维列表

a = [
["高小一",18,30000,"北京"], ["高小二",19,20000,"上海"], ["高小一",20,10000,"深圳"], ]
for m in range(3):
for n in range(4):
print(a[m][n],end="\t")
print() #打印完一行,换行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值