鱼C论坛

 找回密码
 立即注册
查看: 1625|回复: 6

[已解决]求助一个循环问题

[复制链接]
发表于 2021-6-24 17:30:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
以下是我写的关于一个二元矩阵列表生成的,但是最运行矩阵的所有行都会被循环最后的temp覆盖。

i=int(input("请输入矩阵的行数:"))
j=int(input("请输入矩阵的列数:"))
temp=[0]*j
matrix=[0]*i
for a in range(i):
    for b in range(j):
        temp[b]=a*j+b
    print(temp)
    matrix[a]=temp
print(matrix)

比如运行后是这样的:

请输入矩阵的行数:5
请输入矩阵的列数:6
[0, 1, 2, 3, 4, 5]
[6, 7, 8, 9, 10, 11]
[12, 13, 14, 15, 16, 17]
[18, 19, 20, 21, 22, 23]
[24, 25, 26, 27, 28, 29]
[[24, 25, 26, 27, 28, 29], [24, 25, 26, 27, 28, 29], [24, 25, 26, 27, 28, 29], [24, 25, 26, 27, 28, 29], [24, 25, 26, 27, 28, 29]]

其实我的目标是最后应该输出[[0, 1, 2, 3, 4, 5],[6, 7, 8, 9, 10, 11],[12, 13, 14, 15, 16, 17],[18, 19, 20, 21, 22, 23],[24, 25, 26, 27, 28, 29]]
最佳答案
2021-6-25 13:01:04
不用这么麻烦,我来教你一行代码搞定

  1. i = int(input("矩阵行数"))
  2. j = int(input("矩阵列数"))
  3. a1 = [[j*lie+hang for hang in range(j)] for lie in range(i)]
  4. # a1 = np.array([[j for j in range(3)] for i in range(3)])
  5. print(a1)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-24 17:43:47 | 显示全部楼层
本帖最后由 xiaosi4081 于 2021-6-24 17:58 编辑

可以直接定义一个空列表,再用append方法将值加入列表

注:每次执行外面这层循环时要把temp清空

  1. i=int(input("请输入矩阵的行数:"))
  2. j=int(input("请输入矩阵的列数:"))
  3. temp = []
  4. matrix = []
  5. for a in range(i):
  6.         temp = []
  7.         for b in range(j):
  8.                 temp.append(a*j+b)
  9.         matrix.append(temp)
  10. print(matrix)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-24 17:48:57 | 显示全部楼层
我满足了你的要求,但是跟你的逻辑完全不一样啊。
  1. i=int(input("请输入矩阵的行数:"))
  2. j=int(input("请输入矩阵的列数:"))

  3. number = 0
  4. result = []
  5. for a in range(j):
  6.     result.append([])
  7.     for b in range(i):
  8.         result[a].append(number)
  9.         number += 1

  10. print(result)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-24 17:51:26 | 显示全部楼层
  1. i=int(input("请输入矩阵的行数:"))
  2. j=int(input("请输入矩阵的列数:"))
  3. matrix=[]
  4. for a in range(i):
  5.     temp = []
  6.     for b in range(j):
  7.         temp.append(a*j+b)
  8.     print(temp)
  9.     matrix.append(temp)
  10. print(matrix)
复制代码

你这是列表浅拷贝,深拷贝的问题,具体自己去搜一搜
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-24 17:56:39 | 显示全部楼层
xiaosi4081 发表于 2021-6-24 17:43
可以直接定义一个空列表,再用append方法将值加入列表

注:每次执行外面这层循环时要把temp清空

还是你的方法好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-25 13:01:04 | 显示全部楼层    本楼为最佳答案   
不用这么麻烦,我来教你一行代码搞定

  1. i = int(input("矩阵行数"))
  2. j = int(input("矩阵列数"))
  3. a1 = [[j*lie+hang for hang in range(j)] for lie in range(i)]
  4. # a1 = np.array([[j for j in range(3)] for i in range(3)])
  5. print(a1)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-26 06:25:16 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 17:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表