列表(V)
小甲鱼python课后作业第23讲
1. 请问你是如何理解 ”在 Python 中,变量不是盒子” 这句话的?
在一些编程语言中,经常会有“变量就是盒子”这样的比喻,因为赋值操作就像是往盒子里面放东西。
但在 Python 中变量并不是一个盒子,当赋值运算发生的时候,Python 并不是将数据放进变量里面,而是将变量与数据进行挂钩,这个行为我们称之为引用。
2. 请问下面代码执行后,y 的值是多少?
x = 1
y = x
x = 2
1。
这个例子跟视频中演示的可不是一个性质的东西。
前两个语句执行后,内存中的情况是这样的:
第三个语句将 x 赋值为 2,也就是将其原来指向 1 的引用改为数字 2 的引用了:
视频中演示的是将两个变量指向同一个列表,然后通过下标来修改列表中的元素的值,改的是列表的内容,而非变量的引用,才会牵一发而动全身。
3. 请问下面代码执行后,x == y 返回的结果是 True 还是 False?
>>> x = [1, 2, 3]
>>> y = x
>>> y[1] = 1
>>> x == y
True。
- 请问下面代码实现的是浅拷贝还是深拷贝?
>>> x = [[1, 2, 3], [4, 5, 6]]
>>> y = x[:]
浅拷贝
5. 请问下面代码执行后,列表 x 和 y 的内容分别是什么?
>>> x = [[1, 2, 3], [4, 5, 6]]
>>> y = x.copy()
>>> y.append(7)
>>> y[1].append(8)
代码执行后,列表 x 变成 [[1, 2, 3], [4, 5, 6, 8]]
,列表 y 变成 [[1, 2, 3], [4, 5, 6, 8], 7]
。
调用列表的 copy()
方法实现的是浅拷贝,浅拷贝,只能拷贝第一层数据,其余仅拷贝其引用。y.append(7)
是往列表 y 添加一个新元素 7,这一步操作对列表 x 并不会产生任何影响;
但是,y[1].append(8)
是往列表 y 的内嵌列表添加一个新元素,由于是浅拷贝,所以两个内嵌的列表是 x 和 y 共享的,该操作也会对列表 x 产生影响。
6. 请问下面代码执行后,列表 s 的内容是什么?
>>> s = [1]
>>> s.append(s)
[1, […]]。
首先,你得理解将变量与数据进行挂钩的这个行为,我们称之为引用:
那么,那么对于s.append(s)
这样的代码,Python 会在列表的最后添加一个元素,并且其内容是指向 s,即自身:
7. 创建一个88 x 88的随机整数矩阵(二维列表),然后匹配用户输入的整数是否与其中某元素相等,如果相等则打印其行号和列号。
import random
'''
#二维列表方法一
nums = []
nums = [[random.randint(0,1024) for j in range(1,89)] for i in range(1,89)]
print(nums)
'''
#二维列表方法二
nums = []
for i in range(88):
nums.append([])
for j in range(88):
nums[i].append(random.randint(0,1024))
n = int(input("请输入一个待匹配整数(0-1024):"))
for i in range(88):
for j in range(88):
if nums[i][j] == n:
print(i,j)
8. 请编程找出矩阵中的幸运数字。
说明:假设给定一个 m * n 的矩阵(矩阵中数值的取值范围是 0~1024,且各不相同),如果某一个元素的值在同一行的所有元素中最小,并且在同一列的所有元素中最大,那么该元素便是幸运数字。假设给定的矩阵如下:
假设给定的矩阵如下:
matrix = [[10, 36, 52],
[33, 24, 88],
[66, 76, 99]]
那么输出结果应该是 66(同时满足同一行的所有元素中最小,并且在同一列的所有元素中最大)。
matrix = [[10, 36, 52],
[33, 24, 88],
[66, 76, 99]]
row = len(matrix)
col = len(matrix[0])
min_row = [1024] * row #提前将min_row赋值成[1024, 1024, 1024]
max_col = [0] * col #[0, 0, 0]
# 遍历矩阵中的每一个元素
# 找到每行中最小的元素,并将它们存放到列表min_row中
# 找到每列中最大的元素,并将它们存放到列表max_col中
for i in range(row):
for j in range(col):
min_row[i] = min(matrix[i][j],min_row[i])
max_col[j] = max(matrix[i][j],max_col[j])
# 遍历矩阵中的每一个元素
# 判断是否同时满足“同一行的所有元素中最小”和“同一列的所有元素中最大”
for i in range(row):
for j in range(col):
if matrix[i][j] == min_row[i] and matrix[i][j] == max_col[j]:
print(matrix[i][j])