列表(V)

列表(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。

在这里插入图片描述

  1. 请问下面代码实现的是浅拷贝还是深拷贝?
>>> 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])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值