Loading...
墨滴

瀋凣

2021/07/19  阅读:48  主题:极简黑

python笔记16

Python day16

1. 列表的加法和乘法

列表对+*的操作符与字符串相似,+号用于组合列表*号用于重复列表。

举个栗子:
>>> num1 = [1,2,3,4]
>>> num2 = [5,6,7,8]
>>> num1 + num2
[12345678]
>>> num1 * 3
[123412341234]

2. 嵌套列表

嵌套列表即在列表里创建其它列表,也叫二维列表

2.1 创建二维列表

与一维列表类似,只是将列表里的元素换成另一个列表。

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

2.2 访问二维列表

2.2.1 遍历

想要遍历嵌套列表,自然要使用嵌套循环了:

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

改变一下格式,让它更像一个“matrix”:

>>> for i in matrix:
        for j in i:
            print(j,end="  ")
        print()
        
1  2  3  
4  5  6  
7  8  9  

2.2.2 访问二维列表中的元素

在一维列表中,我们用下标来访问列表中的任意元素,但在二维列表中,这只能访问到列表中的列表:

>>> matrix[0]
[123]

如果我们想要访问列表中的列表的元素,就要用到两次下标索引:

>>> matrix[0][0]
1
>>> matrix[1][1]
5
>>> matrix[2][2]
9

2.3 初始化二维列表

除了像上文中那样指定列表中的每个元素的值创建二维列表,我们还可以通过循环来创建并初始化二维列表。

>>> a = [0] * 3
a
[000]
>>> for i in range(3):
        a[i] = [0] * 3
        
>>> a
[[000], [000], [000]]

这时候有聪明的同学表示不屑一顾:“老师你四不四撒,创建二维列表哪用得着循环呀。”

>>> b = [[0] * 3] * 3
>>> b
[[000], [000], [000]]

乍看之下好像没错,并且显得我刚刚的方法非常的繁琐且愚蠢。但是这种方法是错的
为什么是错的呢?我们尝试为其中的元素进行赋值:

>>> a[1][1] = 1
>>> a
[[000], [010], [000]]
>>> b[1][1] = 1
>>> b
[[010], [010], [010]]

我们发现,当我们为b列表其中一个元素进行赋值时,列表里的每一行都有元素发生了改变。这显然不符合我们的要求。

为什么会发生这种事呢?

身份运算符 is

is是判断两个标识符是不是引用自一个对象。

举个栗子:
>>> str1 = "qmrobot"
>>> str2 = "qmrobot"
>>> str1 is str2
True
>>> list1 = [1,2,3]
>>> list2 = [1,2,3]
>>> list1 is list2
False

通过上面的例子我们可以发现,Python对于不同类型的对象的存储方式是不一样的。

利用is运算符对a、b两个列表进行检验:

>>> a[0is a[1]
False
>>> a[1is a[2]
False
#a列表没有问题
>>> b[0is b[1]
True
>>> b[1is b[2]
True
#b列表的每一行都是对同一个列表的引用

由此我们可知,用*对一个嵌套列表的拷贝仅仅拷贝的是原列表的引用,而不是物理意义上的拷贝。

点点关注不迷路
点点关注不迷路
- END -

瀋凣

2021/07/19  阅读:48  主题:极简黑

作者介绍

瀋凣