学习列表的学习笔记吧
这是列表的学习笔记,我以后会在这个帖里塞一点我的各种学习笔记A = * 3
A
for i in range(3):
A = * 3
刚刚i in range(3),是i在(0,1,2)里面,A是索引,把相应的A里面的内容替换成=后面的内容,就比如,A=*3,A=*3,A=*3
小甲鱼什么都好,就是不解释啊,我感觉初学者还是要边打边思考啊,要不然真的什么都不会啊 您好!感谢分享您的列表学习笔记! 这里帮您梳理一下几个关键点,让理解更清晰哦~
首先,您写的 A =* 3 缺少了左边的初始列表。正确的列表乘法应该是:
A = * 3
print(A)# 输出
它的作用是将列表重复拼接 n 次,而不是给每个元素赋值。
接着,关于循环 for i in range(3) ,您写的 A = * 3 同样不完整。正确的写法是给列表的每个索引元素重新赋值,例如:
A = # 先有一个列表
for i in range(3):
A = i * 3 # 将第 i 个元素改为 i*3
print(A)# 输出
这里的 i 是从 0 开始的索引,range(3) 就是 0,1,2 ,每次循环修改 A 的值。
您提到的“A = * 3”其实是不完整的表达式,建议先写出完整的变量和运算符,否则会导致语法错误。小甲鱼视频中可能默认大家知道列表乘法的写法,但遇到不明确的地方,多动手调试是最好的学习方法!
非常期待您后续继续在这里更新学习笔记,我会尽力帮您解答疑惑!有啥问题随时说~
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2026-4-24 15:12
您好!感谢分享您的列表学习笔记! 这里帮您梳理一下几个关键点,让理解更清晰哦~
首先,您写的 A =* ...
X =
Y =
X is Y
False
a = "喵"
b = "喵"
a is b
False
a is b
False
这个a is b 为什么报错了? 王冯蕊 发表于 2026-04-24 15:17
FishC 发表于 2026-4-24 15:12
您好!感谢分享您的列 ...
您好!我来解释一下您遇到的 `a is b` 为什么"报错"的问题。
首先,从您贴出的代码来看,它并没有真正的报错(语法错误或运行时异常),而是返回了 `False`。这可能让您误以为出错了,其实只是比较结果不符合预期。
那么,为什么 `a is b` 会得到 `False` 呢?
核心原因: `is` 比较的是两个对象的内存地址(即是否为同一个对象),而 == 比较的是两个对象的值是否相等。
对于字符串 `"喵"`,Python 内部有一个“字符串驻留”(string interning)机制,会重复使用小字符串(通常只包含字母、数字、下划线且长度较短的字符串)。但中文 `"喵"` 不一定会被驻留,因此 `a` 和 `b` 虽然内容相同,但可能被分配到了不同的内存地址,所以 `is` 返回 `False`。
而如果您写的是:
a = "hello"
b = "hello"
a is b # 可能返回 True,因为 "hello" 是英文字母且较短,被驻留
但对于 `"喵"` 这种情况,大多数 Python 解释器不会自动驻留,因此 `a is b` 的结果就是 `False`。
[*] 如果确实需要判断内容是否相等:请使用 == 运算符。例如:`a == b` 会返回 `True`。
[*] 如果看到类似报错信息:请检查是否多写了括号、拼写错误等。您给的代码本身没有问题,所以不应该是报错。
希望这个解释能帮您理解 `is` 和 `==` 的区别!今后写笔记时可以试试直接运行对比,加深印象哦~ 有问题随时问!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2026-4-24 15:18
您好!我来解释一下您遇到的 `a is b` 为什么"报错"的问题。
首先,从您贴出的代码来看,它并没有真 ...
x =
y = x.copy()
x = 1
x
y
y = x[:]
x = 1
x
y
这是拷贝的一种方法,是浅拷贝。
x = [,,]
y = copy.deepcopy(x)
x = 0
x
[, , ]
y
[, , ]
这是深拷贝,需要植入copy函数,深拷贝可以拷贝任何嵌套列表。
这是我今天的学习笔记! 王冯蕊 发表于 2026-04-25 13:49
FishC 发表于 2026-4-24 15:18
您好!我来解释一下您 ...
您的学习笔记写得很棒,思路清晰!接下来我帮您补充和修正几个小细节,让理解更准确一点儿~
---
[*] 浅拷贝(.copy()):
当您写 x = 时,y = x.copy() 会创建一个新列表,里面包含与 x 相同的元素引用。
如果您之后再写 x = 0(注意这是修改元素,不是重新赋值整个 x),那么 y 的值也会受到影响(因为里面的 1 和 x 指向的是同一个数字对象)。
但您笔记中写的是 x = 1,这会把 x 这个变量指向另一个整数 1,而 y 依然指向原来的列表,所以 y 不受影响。
[*] 深拷贝(copy.deepcopy()):
需要用 import copy 导入模块。
对于嵌套列表 x = [,],深拷贝会递归复制所有层,修改 x 中的子列表完全不影响 y。
x = 0 后,y 仍然是 [,]。
---
您笔记中写的 x = [,,] 可能是个笔误,应该写成 x = 或 x = [,] 这样的完整列表。另外 x = 1 后 x 就变成数字 1 了,不再是列表,所以打印 x 得到 1 是正常的。
整体来说,您已经抓住了核心区别:浅拷贝只复制引用,深拷贝递归复制所有对象。继续加油,边打边思考就是最好的学习方式! 有任何疑问随时来问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2026-4-25 13:49
您的学习笔记写得很棒,思路清晰!接下来我帮您补充和修正几个小细节,让理解更准确一点儿~
---
...
oho
oho =
oho
这里求得是列表里的数的双倍,for后面应该跟的是range数值
maxrix = [,
,
]
col2 = for row in maxrix]
col2
diaag = for i in range(len(maxrix))]
diaag
这是分别求得列表里的列表第三位,和主对角的数字 王冯蕊 发表于 2026-04-25 14:21
FishC 发表于 2026-4-25 13:49
您的学习笔记写得很棒 ...
您的学习笔记记录得很认真,能够动手推导代码并思考背后的逻辑,这是非常棒的学习方法! 我帮您把今天的内容稍微梳理和修正一下,让笔记更准确~
---
关于第一个例子“oho”求双倍:
您提到“for后面应该跟的是range数值”,但列表推导式的常见写法其实是直接遍历列表元素,而不是必须用range。例如:
oho =
double = # 得到
当然,用 range 也可以:
double = * 2 for i in range(len(oho))]
但通常更推荐第一种直接遍历元素的方式,更简洁直观。
---
关于矩阵例子:
您写的 `matrix = [, , ]` 是正确的。但后面两行代码有拼写错误和逻辑缺失:
1. col2(提取每个子列表的第三个元素):
您写的是 `col2 = `,这只会得到原样矩阵,不是第三列。正确写法应该是:
col2 = for row in matrix] # 索引2对应第三列
这样会得到 ``。
2. diag(提取主对角线元素):
您写的是 `diaag = for i in range(len(maxrix))]`,变量名 `maxrix` 应为 `matrix`。正确写法:
diag = for i in range(len(matrix))] # 得到
---
总结要点:
[*] 列表推导式的本质是将循环和条件压缩成一行。
[*] 当需要从嵌套列表中提取特定列或对角线时,用索引访问即可。
[*] 注意变量名的拼写,运行前检查代码中的`=`、`[`、`]`是否匹配。
继续加油,您已经掌握了列表推导式的基本用法,接下来可以尝试更多嵌套循环或带条件的推导式,比如“过滤出大于5的数的双倍”等练习~ 有问题随时来问!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]