Python中的列表

1.创建列表

使用中括号把要添加的元素括起来,不同元素用逗号隔开。

>>> rhyme = [1, 2, 3, 4, 5, "上山打老虎"]
>>> print(rhyme)
[1, 2, 3, 4, 5, '上山打老虎']

2.访问列表中的元素

(1)希望顺序访问列表中的元素:使用for语句

>>> for each in rhyme:
...     print(each)
...
1
2
3
4
5
上山打老虎

(2)希望访问特定元素:使用下标的方法

>>> rhyme[0]
1
>>> rhyme[2]
3
>>> rhyme[5]
'上山打老虎'

3.Python中的下标索引

和C语言类似,从前往后是从0开始一直到最后
在这里插入图片描述
特殊的是,从后往前,是从-1开始索引的

在这里插入图片描述

4.列表切片

rhyme[1,2,3,4,5,6]

切片方式——rhyme[a : b : c]
切片参数的描述:
(1)首先参数都必须是整数;
(2)其次,a表示从下标为a的元素开始(包含下标为a的元素),b表示到下标为b的元素结束(不包含下标为b的元素),c表示下标跳转的增加的量。
(3)注意:abc三个参数不一定都需要存在;thyme[:]表示寻找整个列表的元素;thyme[::2]表示从下标为0的元素开始,每次跳转2个位移的增加量。

>>> rhyme[0:3]
[1, 2, 3]
>>> rhyme[3:6]
[4, 5, '上山打老虎']
>>> rhyme[:3]
[1, 2, 3]
>>> rhyme[3:]
[4, 5, '上山打老虎']
>>> rhyme[:]
[1, 2, 3, 4, 5, '上山打老虎']
>>> rhyme[0:6:2]
[1, 3, 5]
>>> rhyme[::2]
[1, 3, 5]
>>> rhyme[::-2]
['上山打老虎', 4, 2]
>>> rhyme[::-1]
['上山打老虎', 5, 4, 3, 2, 1]

5.列表的增

(1)对列表末尾追加一个元素,使用append()的方法

>>> heros.append("黑寡妇")
>>> heros
['钢铁侠', '绿巨人', '黑寡妇']

(2)对列表末尾一次性追加多个元素,使用extend()的方法

>>> heros.extend(["鹰眼", "灭霸", "雷神"])
>>> heros
['钢铁侠', '绿巨人', '灭霸', '黑寡妇', '鹰眼', '灭霸', '雷神']

其中extend()的参数必须是可迭代对象——所以必须是一个列表
(3)使用列表切片的方法也可对列表进行元素的增添

>>> s = [1, 2, 3, 4, 5]
>>> # 下面的做法等同于 s.append(6)
>>> s[len(s):] = [6]
>>> s
[1, 2, 3, 4, 5, 6]
>>> # 下面的做法等同于 s.extend([7, 8, 9])
>>> s[len(s):] = [7, 8, 9]
>>> s
[1, 2, 3, 4, 5, 6, 7, 8, 9]

(4)对任意位置的元素进行增添——使用insert()的方法
insert(a,b)有两个参数,a表示要插入元素的位置,b表示要添加的元素

>>> s = [1, 3, 4, 5]
>>> s.insert(1, 2)
>>> s
[1, 2, 3, 4, 5]

6.列表的删

(1)删除特定元素,使用remove()的方法

>>> heros.remove("灭霸")
>>> heros
['钢铁侠', '绿巨人', '黑寡妇', '鹰眼', '灭霸', '雷神']

需要注意两点:

  • 如果列表中存在多个要删除的元素,只会删除靠前的第一个元素;
  • 如果要删除的元素不存在,则程序会报错。

(2)删除特定下标位置的元素,使用pop()的方法
pop()参数就是下标的数

>>> heros.pop(2)
'黑寡妇'
>>> heros
['钢铁侠', '绿巨人', '鹰眼', '灭霸', '雷神']

pop()的参数是可选的,如果没有选择,就会弹出并删除最后一个元素;

>>> heros.pop()
'雷神'
>>> heros
['钢铁侠', '绿巨人', '鹰眼', '灭霸']

(3)清空整个列表,使用clear()

>>> heros.clear()
>>> heros
[]

7.列表的改

列表和字符串最大的区别是,列表是可改的,而字符串是不可改的
替换列表中元素和访问列表中的元素类似,找到要替换的元素后,通过赋值运算来修改
(1)修改特定元素

>>> heros = ['蜘蛛侠', '绿巨人', '黑寡妇', '鹰眼', '灭霸', '雷神']
>>> heros[4] = "钢铁侠"
>>> heros
['蜘蛛侠', '绿巨人', '黑寡妇', '鹰眼', '钢铁侠', '雷神']

(2)连续修改多个元素,使用切片来实现

>>> heros[3:] = ["武松", "林冲", "李逵"]
>>> heros
['蜘蛛侠', '绿巨人', '黑寡妇', '武松', '林冲', '李逵']

8.列表的排序和翻转

排序使用到sort(),翻转使用到reverse()

>>> nums = [3, 1, 9, 6, 8, 3, 5, 3]
>>> nums.sort()
>>> nums
[1, 3, 3, 3, 5, 6, 8, 9]
>>> nums.reverse()
>>> nums
[9, 8, 6, 5, 3, 3, 3, 1]

>>> nums = [3, 1, 9, 6, 8, 3, 5, 3]
>>> nums.sort(reverse=True)
>>> nums
[9, 8, 6, 5, 3, 3, 3, 1]

9.列表中的查

(1)如果希望的到列表中的特定的元素存在几个,使用count()

>>> nums.count(3)
3

表示nums列表中有3个元素为3的数
(2)找特定元素的下标,使用index()

>>> heros.index("绿巨人")
4

注意,返回的是找到第一个元素的下标 ;
index有两个可选的参数,start和end,表示寻找元素下标的范围

>>> nums.index(3, 1, 7)
5

(3)拷贝列表
copy()

>>> nums_copy1 = nums.copy()
>>> nums_copy1
[3, 1, 9, 6, 8, 3, 5, 3]

切片

>>> nums_copy2 = nums[:]
>>> nums_copy2
[3, 1, 9, 6, 8, 3, 5, 3]

这两种切片的方法被Python称为浅拷贝;

10.列表的加法和乘法

(1)列表的加法也是拼接,两个列表相加之后还是列表


>>> s = [1, 2, 3]
>>> t = [4, 5, 6]
>>> s + t
[1, 2, 3, 4, 5, 6]

(2)列表的乘法就是重复几次

>>> s * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]

11.列表的嵌套

写法1:

>>> matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

写法2:

>>> matrix = [[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]]

表示的是二位列表

12.访问嵌套列表

(1)for循环进行访问

>>> for i in matrix:
...     for each in i:
...         print(each)
...
1
2
3
4
5
6
7
8
9

(2)下标进行访问

>>> matrix[0]
[1, 2, 3]
>>> matrix[1]
[4, 5, 6]
>>> matrix[2]
[7, 8, 9]
>>> matrix[0][0]
1
>>> matrix[1][1]
5
>>> matrix[2][2]
9

13.使用for循环来创建和初始化二位列表

>>> A = [0] * 3
>>> for i in range(3):
...     A[i] = [0] * 3
...
>>> A
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

高级错误:

A=[[0]*3]*3

14.变量不是盒子

在一些编程语言中,经常会有 “变量就是盒子” 这样的比喻,因为赋值操作就像是往盒子里面放东西。

但在 Python 中变量并不是一个盒子,当赋值运算发生的时候,Python 并不是将数据放进变量里面,而是将变量与数据进行挂钩,这个行为我们称之为引用

15.浅拷贝和深拷贝

浅拷贝:利用列表的 copy() 方法或者切片来实现

深拷贝:利用copy模块的deepcopy()函数来实现

浅拷贝可以用于处理一维列表,对于嵌套列表的拷贝,只能拷贝第一层数据,其余仅拷贝其引用:

>>> x = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> y = x.copy()
>>> x[1][1] = 0
>>> x
[[1, 2, 3], [4, 0, 6], [7, 8, 9]]
>>> y
[[1, 2, 3], [4, 0, 6], [7, 8, 9]]

浅拷贝的逻辑图如下:
在这里插入图片描述
深拷贝可以处理多维的列表:

>>> x = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> y = copy.deepcopy(x)
>>> x[1][1] = 0
>>> x
[[1, 2, 3], [4, 0, 6], [7, 8, 9]]
>>> y
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

深拷贝的逻辑图如下:
在这里插入图片描述

16.列表的推导式

列表推导式的优势:使代码变得简洁;程序运行速率高效。

>>> oho = [1, 2, 3, 4, 5]
>>> for i in range(len(oho)):
...     oho[i] = oho[i] * 2

使用列表推导的可写成下面的形式


>>> oho = [1, 2, 3, 4, 5]
>>> oho = [i * 2 for i in oho]

17.列表推导的基本语法

[expression for target in iterable]

18.处理矩阵

利用列表推导式处理矩阵也是非常方便,比如下面代码是将矩阵第 2 列的元素给提取出来:

>>> matrix = [[1, 2, 3],
...           [4, 5, 6],
...           [7, 8, 9]]
>>> col2 = [row[1] for row in matrix]
>>> col2
[2, 5, 8]

又比如,下面代码是获取矩阵主对角线上的元素(就是从左上角到右下角这条对角线上的元素):

>>> diag = [matrix[i][i] for i in range(len(matrix))]
>>> diag
[1, 5, 9]

19.创建二维列表的错误方式

不能这样创建二维列表

>>> B = [[0] * 3] * 3
>>> B
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

因为如果你试图修改其中的一个元素,就会发现有多个元素同时被修改了:

>>> B[1][1] = 1
>>> B
[[0, 1, 0], [0, 1, 0], [0, 1, 0]]

这是因为内部嵌套的列表不是三个独立的列表,而是同一个列表的三次引用而已。
正确的做法是:

>>> A = [0] * 3
>>> for i in range(3):
...     A[i] = [0] * 3
...
>>> A
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> A[1][1] = 1
>>> A
[[0, 0, 0], [0, 1, 0], [0, 0, 0]]

更好的方法:利用列表推导式来创建


>>> S = [[0] * 3 for i in range(3)]
>>> S
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> S[1][1] = 1
>>> S
[[0, 0, 0], [0, 1, 0], [0, 0, 0]]

20.具有条件的列表推导式

列表推导式其实还可以添加一个用于筛选的 if 分句,完整语法如下:

[expression for target in iterable if condition1]

多层嵌套:

[expression for target1 in iterable1
for target2 in iterable2

for targetN in iterableN]

可附加条件:

[expression for target1 in iterable1 if condition1
for target2 in iterable2 if condition2

for targetN in iterableN if conditionN]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰深入学习计算机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值