鱼C论坛

 找回密码
 立即注册
查看: 620|回复: 9

[已解决]求救,怎么创建二维空列表

[复制链接]
发表于 2024-1-15 17:31:02 | 显示全部楼层 |阅读模式

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

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

x
如题所示,做作业时候写杨辉三角程序,报错创建二维列表错误,请大神指教前三行怎么修改
  1. empty = [] * 10
  2. for i in range(10):
  3.     empty[i] = [ ] * 10
  4. for i in range(10):#控制每行元素输出
  5.     empty[i].append(1)
  6.     if i >= 2:
  7.         j = 2#用来控制每一行列坐标
  8.         while j <= i:
  9.             empty[i].append(empty[i+1-1][j-1] + empty[i+1-1][j])
  10.             j += 1
  11.     if i > 0:
  12.         empty[i].append(1)
  13. print(empty)        
复制代码

最佳答案
2024-1-15 17:42:58
3117975470 发表于 2024-01-15 17:42
okok,成功了,能再帮我看看第九行代码为什么会报错吗


当您尝试在第九行使用`empty.append(1)`时报错,这是因为在该行之前的代码中,您已经将`empty`定义为一个二维列表,其中每一行都是一个空列表。由于`empty`是一个二维列表,您不能直接使用`append`方法来添加元素。

如果您想要在第九行添加一个元素1到第九行的末尾,可以这样修改代码:
  1. empty[8].append(1)
复制代码

这里的`empty[8]`表示访问第九行(索引为8)的列表,然后使用`append`方法将元素1添加到该列表的末尾。

请注意,在Python中,索引从0开始计数,所以第一行对应的索引为0,第九行对应的索引为8。

希望这样能够解决您的问题!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
微信截图_20240115173034.png

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-15 17:31:29 | 显示全部楼层
你的代码中的问题在于创建二维空列表的方法不正确。下面是一个修改后的版本:

  1. empty = []
  2. for i in range(10):
  3.     row = [0] * 10
  4.     empty.append(row)

  5. for i in range(10): # 控制每行元素输出
  6.     empty[i][0] = 1
  7.     if i >= 2:
  8.         for j in range(1, i):
  9.             empty[i][j] = empty[i-1][j-1] + empty[i-1][j]
  10.     empty[i][i] = 1

  11. for row in empty:
  12.     print(row)
复制代码


这样,你就可以正确地创建一个10行10列的二维空列表来表示杨辉三角了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-15 17:35:50 | 显示全部楼层
FishC 发表于 2024-1-15 17:31
你的代码中的问题在于创建二维空列表的方法不正确。下面是一个修改后的版本:

但是你这个二位列表是0来填充的,有没有不是零填充的怎么写,完全是空的利用append来添加元素进去

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-15 17:36:15 | 显示全部楼层
3117975470 发表于 2024-01-15 17:35
但是你这个二位列表是0来填充的,有没有不是零填充的 ...


如果你想创建一个完全为空(没有任何元素)的二维列表,可以使用如下代码:

empty = []

for i in range(10):
    row = []
    empty.append(row)

print(empty)

这样,你就创建了一个10行空的二维列表。每一行都是一个空的列表。你可以使用append方法将元素添加到这些空列表中。例如,如果要在第一行的末尾添加元素1,可以这样做:

empty[0].append(1)

希望这能满足你的需求!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-15 17:42:21 | 显示全部楼层
FishC 发表于 2024-1-15 17:36
如果你想创建一个完全为空(没有任何元素)的二维列表,可以使用如下代码:

empty = []

okok,成功了,能再帮我看看第九行代码为什么会报错吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-15 17:42:58 | 显示全部楼层    本楼为最佳答案   
3117975470 发表于 2024-01-15 17:42
okok,成功了,能再帮我看看第九行代码为什么会报错吗


当您尝试在第九行使用`empty.append(1)`时报错,这是因为在该行之前的代码中,您已经将`empty`定义为一个二维列表,其中每一行都是一个空列表。由于`empty`是一个二维列表,您不能直接使用`append`方法来添加元素。

如果您想要在第九行添加一个元素1到第九行的末尾,可以这样修改代码:
  1. empty[8].append(1)
复制代码

这里的`empty[8]`表示访问第九行(索引为8)的列表,然后使用`append`方法将元素1添加到该列表的末尾。

请注意,在Python中,索引从0开始计数,所以第一行对应的索引为0,第九行对应的索引为8。

希望这样能够解决您的问题!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-15 17:43:09 | 显示全部楼层
FishC 发表于 2024-1-15 17:36
如果你想创建一个完全为空(没有任何元素)的二维列表,可以使用如下代码:

empty = []

list index out of range这个原因是啥意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-15 17:43:58 | 显示全部楼层
3117975470 发表于 2024-01-15 17:43
list index out of range这个原因是啥意思


"list index out of range"的错误意味着你正在尝试访问列表中不存在的索引位置。

在Python中,列表的索引是从0开始的。例如,对于一个包含5个元素的列表,它们的索引分别为0、1、2、3和4。

当你使用一个超出列表范围的索引时,就会触发"list index out of range"错误。例如,如果你的列表只有5个元素,但你尝试访问索引为6的元素,就会出现这个错误。

解决这个问题的方法是确保你的索引值在列表的有效范围之内。你可以使用条件语句来检查索引是否超出了列表的长度,或者使用try-except语句来捕获这个错误并进行相应的处理。

以下是一个示例代码,展示了如何避免"list index out of range"错误:

  1. my_list = [1, 2, 3, 4, 5]

  2. # 检查索引是否超出范围
  3. index = 6
  4. if index < len(my_list):
  5.     value = my_list[index]
  6.     print(value)
  7. else:
  8.     print("索引超出范围")

  9. # 使用try-except捕获错误
  10. try:
  11.     value = my_list[6]
  12.     print(value)
  13. except IndexError:
  14.     print("索引超出范围")
复制代码


希望这能帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-15 17:51:35 | 显示全部楼层
我来看看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-15 17:54:41 | 显示全部楼层
你的二维列表初始化存在问题,初始化空列表的方法不能直接使用 `empty = [] * 10`,这样的表达方法只会创造出10个指向同一空列表的引用,而不是10个空列表。正确的初始化方法应该是用列表推导式 `empty = [[] for _ in range(10)]`。

此外,在创建杨辉三角时,你的代码中对索引的处理有些复杂,可以直接使用 `empty[i - 1][j - 1] + empty[i - 1][j]` 替代 `empty[i+1-1][j-1] + empty[i+1-1][j]`。

你的代码可以修改为以下形式:
  1. empty = [[] for _ in range(10)]
  2. for i in range(10):#控制每行元素输出
  3.     empty[i].append(1)
  4.     if i >= 2:
  5.         j = 1#用来控制每一行列坐标
  6.         while j < i:
  7.             empty[i].append(empty[i - 1][j-1] + empty[i - 1][j])
  8.             j += 1
  9.     if i > 0:
  10.         empty[i].append(1)
  11. print(empty)
复制代码

注:以上代码会生成一个长度为10的杨辉三角,每行以1开始和结束,中间元素通过前一行的对应元素之和进行计算。如果你需要生成的杨辉三角长度不同,可以相应地修改代码中的10为你需要的长度。

以上代码考虑了所有的边界情况,例如,当 `i == 0` 或 `i == 1` 时,只需要在当前行加入一个1,不需要进行中间计算;当 `i >= 2` 时,再执行中间计算和在末尾加一个1的操作。

评分

参与人数 1鱼币 +2 收起 理由
当下的力量 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 07:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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