G-Bule 发表于 2022-10-2 16:02:48

大佬求救

问题: 创建一个 88 x 88 的随机整数矩阵(二维列表),然后匹配用户输入的整数是否与其中某元素相等,如果相等则打印其行号和列号。
要求1:随机整数取值范围 0~1024
要求2:需找出所有匹配的元素

我的代码:
import random
list =[]
rythm = []
for i in range(88):
    for j in range(88):
      a = random.randint(0,1024)
      rythm.append(a)
    list.append(rythm)
    rythm.clear()
# 我在此插入print(list),却发现结果是二维空列表   (为什么啊?)
target = int(input("请输入目标整数:"))
for x in range(88):
    for y in range(88):
      if list == target:
            print(x,y)
      

深谙流年 发表于 2022-10-2 16:47:26

clear好像不行你直接rythm = 【】

G-Bule 发表于 2022-10-2 16:53:25

深谙流年 发表于 2022-10-2 16:47
clear好像不行你直接rythm = 【】

谢谢你
我再等等看有没有人给我解释下原理

深谙流年 发表于 2022-10-2 17:10:27

G-Bule 发表于 2022-10-2 16:53
谢谢你
我再等等看有没有人给我解释下原理

好像跟id有关

Twilight6 发表于 2022-10-2 17:27:43


因为列表 rythm 的地址始终没变,你调用 clear 方法只是将列表中的元素清空了

而 rythm 列表还是这个列表,即可以理解为,你只是将一个盒子中的玩具全倒了,但是盒子还是这个盒子

而且你加入 list 中去的 rythm 都指向这个列表的地址,即你加入 list 列表中的 rythm 都是指这个盒子,自然显示的都为这个盒子中的结果,即全部都为空

将 rythm.clear() 这行代码改成 rythm = [] 即可,也就是每次重新创建列表(可以形象理解为新的盒子)加入 list 中

另外这里建议不要用 Python 的关键字进行变量的赋值,例如你这里,这样赋值就会导致 list 函数无法正常使用了

参考代码:

list = []
rythm = []
for i in range(88):
    for j in range(88):
      a = random.randint(0, 1024)
      rythm.append(a)
    list.append(rythm)
    rythm = []

target = int(input("请输入目标整数:"))
for x in range(88):
    for y in range(88):
      if list == target:
            print(x, y)
页: [1]
查看完整版本: 大佬求救