鱼C论坛

 找回密码
 立即注册
查看: 143|回复: 7

列表遍历

[复制链接]
发表于 2024-5-29 16:34:45 | 显示全部楼层 |阅读模式

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

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

x
a=[1,2,3]
for i in a:
    a[i]=[0]*3
print(a)
提示:TypeError: list indices must be integers or slices, not list


和下面这段代码
a = [0 , 1 , 2]
for i in a:           
    a[i] = [0] * 3     
print(a)  
结果:[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

两段程序就a 的值不一样。但一个能运行,一个提示错误。
两个索引还是没弄明白,请教大家

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2024-5-29 16:35:04 | 显示全部楼层
列表遍历是指通过循环遍历列表中的元素。在第一段代码中,你将列表a赋值为空,所以在遍历时无法获得任何元素,导致报错。

而在第二段代码中,你并未提供列表a的具体值,所以同样无法进行遍历。但在循环内部,你将列表a赋值为一个包含两个空字符串的列表(* 3即['', '']),并在每次循环迭代时都对a进行更新。因此,最后的结果是一个包含两个空字符串的列表。

如果你想正确遍历一个已有元素的列表,并把每个元素都重复三次,可以这样写:

a = [1, 2, 3]  # 假设a是一个含有数字1、2和3的列表
for i in range(len(a)):
    a[i] = a[i] * 3
print(a)

输出结果为[3, 6, 9],表示将列表中的每个元素都乘以3。请注意,这里使用了range(len(a))来遍历列表索引的范围,然后通过a[i]修改列表中的元素值。

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

使用道具 举报

发表于 2024-5-29 18:00:01 | 显示全部楼层
本帖最后由 jackz007 于 2024-5-29 22:18 编辑

     先澄清一个概念,序列型数据的索引一般都是从 0 开始的,所以,一个有 3 个元素列表的有效索引值的范围是 0 - 2,也就是 0,1,2,当试图用索引 3 去访问一个只有 3 个元素的列表时,一定会遭遇下标越界的错误。
a = [1,2,3]
for i in a:
    a[i] = [0] * 3
print(a)
    为了方便找到问题,我们把循环进行分解
a = [1,2,3]
for i in a :        # 第 1 次循环 i 将索引到 a[0],也就是数值 1
    a[i] = [0] * 3  # 执行过此句后,a[1] 由数值 2 变为 [0 , 0 , 0],于是,a 变为 [1, [0 , 0 , 0] , 3]
for i in a :        # 第 2 次循环 i 将索引到 a[1],也就是 [0 , 0 , 0] 
    a[i] = [0] * 3  # i 是 [0 , 0 , 0],那么,a[i] 就是 a[[0 , 0 , 0]],这就是出错的原因,列表的索引必须是整型数,不可以是列表。  
. . . . . .
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-30 16:14:01 | 显示全部楼层
为什么会显示list assignment index out of range(超出索引范围的问题)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-31 12:06:01 From FishC Mobile | 显示全部楼层
祝建宇 发表于 2024-5-30 16:14
为什么会显示list assignment index out of range(超出索引范围的问题)

a = [1 , 2 , 3]
for i in a :
    a[i] = . . .
       第三次循环时,i 值为 3,a[ i ] 实际上就是 a[3],下标索引还能不越界?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-6-1 05:35:26 | 显示全部楼层
jackz007 发表于 2024-5-31 12:06
第三次循环时,i 值为 3,a[ i ] 实际上就是 a[3],下标索引还能不越界?

我是把a[i]变成a[i-1]得出结果为[3,9,9],不应该是[9,3,6]吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-6-1 05:49:38 | 显示全部楼层
FishC 发表于 2024-5-29 16:35
列表遍历是指通过循环遍历列表中的元素。在第一段代码中,你将列表a赋值为空,所以在遍历时无法获得任何元 ...

为什么我的得到的结果是[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]这个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-6-1 05:49:55 | 显示全部楼层
祝建宇 发表于 2024-06-01 05:49
为什么我的得到的结果是这个


抱歉,之前的回答有误。在第二段代码中,你将列表a赋值为空,然后通过循环迭代来重复修改a的值。每次修改时,都会将列表a乘以3。因为空列表乘以任何数都仍然是空列表,所以循环结束后,a仍然是一个空列表。

实际上,这两段代码都无法正确遍历列表并将其中的元素重复三次。下面给出一个可以正确实现的示例代码:

a = [1, 2, 3]
result = []  # 创建一个空列表用于存放重复三次的元素
for i in a:
    for j in range(3):
        result.append(i)  # 将元素重复三次添加到result列表中
print(result)

输出结果为[1, 1, 1, 2, 2, 2, 3, 3, 3],表示将列表a中的每个元素都重复三次。

希望这次能够解决你的问题,如果还有其他疑问,请随时提问。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-26 12:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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