python 作业22 列表5

问题:

0.请问你是如何理解 ”在 Python 中,变量不是盒子” 这句话的?

  变量只是引用数据  赋值也就是将一个变量的引用传给另一个变量

1.请问下面代码执行后,y 的值是多少?

>>> x = 1
>>> y = x
>>> x = 2

 1

 

2. 请问下面代码执行后,x == y 返回的结果是 True 还是 False?

>>> x = [1, 2, 3]
>>> y = x
>>> y[1] = 1
>>> x == y

ture

 

3.请问下面代码实现的是浅拷贝还是深拷贝?

>>> x = [[1, 2, 3], [4, 5, 6]]
>>> y = x[:]

 

 浅拷贝

4.请问下面代码执行后,列表 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]

 

5.请问下面代码执行后,列表 s 的内容是什么?

>>> s = [1]
>>> s.append(s)

 一开始以为是[1,[1]] 但实际是错误的  应该是[1, [...]]

因为 s= [1]

是一个引用

 

  但是 s.append(s)  Python 会在列表的最后添加一个元素,并且其内容是指向 s,即自身

 

  举个现实中的例子 拿两面镜子 然后自己站在两面镜子中间

 

 动动手:

0.创建一个 88 x 88 的随机整数矩阵(二维列表),然后匹配用户输入的整数是否与其中某元素相等,如果相等则打印其行号和列号。

要求1:随机整数取值范围 0~1024 

要求2:需找出所有匹配的元素

 

 

import random
matrix = []
for i in range(88):
    matrix.append([])
    for j in range(88):
        matrix[i].append(random.randint(0,1024))
target = int(input("请输入一个整数:"))
for i in range(88):
    for j in range(88):
        if matrix[i][j] == target:
            print (i,j)

 

 

1.请编程找出矩阵中的幸运数字。

说明:假设给定一个 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
max_col = [0] * col
    
# 遍历矩阵中的每一个元素
# 找到每行中最小的元素,并将它们存放到列表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])

 

 

 

视频小结:

copy 拷贝是整个列表 , 不仅仅是变量的引用

利用切片也可以达到拷贝的效果

x = [1,2,3]

y= x[:]

 

 

但是浅拷贝不适合嵌套列表

会出现如下情况

 

因为浅拷贝 只是拷贝了最外层列表  拷贝的也只是引用

 

需要解决的话 需要用到深拷贝

Copy 模块

 

 

深拷贝 不仅仅将对象的引用拷贝了还将所有引用的子对象一并进行了拷贝

 

posted @ 2022-07-09 15:58  DICEi  阅读(39)  评论(0)    收藏  举报