knitr::opts_chunk$set(echo = TRUE)
变量不是将元素放进变量里面,变量只是与数据挂钩,相当于赋值一个引用。
x = 1
y = x
x = 2
y
y的值为1,此处改变了变量的引用所以,y值是不会变的
x = [1, 2, 3]
y = x
y[1] = 1
x == y
返回的结果是Ture。此处只改变了值没有改变引用所以会变换。
x = [[1, 2, 3], [4, 5, 6]]
y = x[:]
我们使用切片还有x.copy()
都是浅拷贝。
x = [[1, 2, 3], [4, 5, 6]]
y = x.copy()
y.append(7)
y[1].append(8)
x
y
x内容为[[1, 2, 3], [4, 5, 6, 8]],y的内容为[[1, 2, 3], [4, 5, 6, 8], 7]。此处浅拷贝只是拷贝了外层对象,如果涉及到嵌套,内层的元素还是引用传递。如果是引用传递的话,则为动一处而变全身。
s = [1]
s.append(s)
s
s列表的内容将会是[1, [...]]
这会使Python进入无限循环,因为添加s之后你会发现原来的列表也会变,之前列表变了之后,你添加的这个也应该是变化的,所以无解了就。
要求1:随机整数取值范围 0~1024
要求2:需找出所有匹配的元素
思路:此处分为两步,第一步创建一个符合要求的二维列表,第二步使用for循环遍历,使用while函数或者if判断,如果与输入整数相等,则打印其行号与列号。
num = input("请输入一个代匹配的整数:")
import random
matrix = []
for i in range(88):
row = []
for j in range(88):
row.append(random.randint(0,1024))
matrix.append(row)
for i in range(88):
for j in range(88):
if matrix[i][j] == num:
print(i,j)
说明:假设给定一个 m * n 的矩阵(矩阵中数值的取值范围是 0~1024,且各不相同),如果某一个元素的值在同一行的所有元素中最小,并且在同一列的所有元素中最大,那么该元素便是幸运数字。
假设给定的矩阵如下:
matrix = [[10, 36, 52],
[33, 24, 88],
[66, 76, 99]]
那么输出结果应该是 66(同时满足同一行的所有元素中最小,并且在同一列的所有元素中最大)。
此题也是分为两步,第一步创建矩阵,要求是 m * n,取值范围是0~1024,而且各不相同
。第二步是进行比较同行最小,同列最大,也就是说是max(matrix[i][j], max_col[j]
,min(matrix[i][j], min_row[i])
如果同行最小与同列最大相等,就说明其是我们需要的元素。
matrix = [[10, 36, 52],
[33, 24, 88],
[66, 76, 99]]
# 算出举证的行数与列数,方便后面for循环遍历
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])
在这段代码中,min(matrix[i][j], min_row[i])
的作用是求矩阵中第 i 行的最小值。首先,程序将 min_row[i]
的初始值设为一个很大的数(这里是 1024),然后遍历矩阵中第 i 行的所有元素,将每个元素与 min_row[i]
比较,取其中的最小值。最终,min_row[i]
中存储的就是矩阵中第 i 行的最小值。