Python 列表推导式的新手问题

2022-11-22 16:33:09 +08:00
 foufoufm
最近在学习 Python ,有个基础语法表达不是很明白。

比如我们要创建一个嵌套表格

看到教程里有一种写法使用了列表表达式,如下

>>>s=[[0]* 3 for i in range(3)]
>>>s

[[0,0,0],[0,0,0],[0,0,0]]

这里有点不懂的是,这个 i 对象没有被左侧的表达所引用,为什么结果会出来呢?
2056 次点击
所在节点    Python
9 条回复
RRRoger
2022-11-22 16:41:27 +08:00
java js 都是这样的啊 这是 feature 并不是用到才会去迭代
foufoufm
2022-11-22 16:44:09 +08:00
@RRRoger 感谢回复,就是有点不明不白的哈哈
foufoufm
2022-11-22 16:45:44 +08:00
因为这个问题跟列表推导式的结构有关系

如果代码如下,
s=[[0]*3 for i in range(3)
for d in range(4)
for e in range(5)
]

会怎么样呢?
Alias4ck
2022-11-22 17:20:00 +08:00
你如果不想使用迭代对象得 话可以写成 [[0]* 3 for _ in range(3)]
shyrock
2022-11-22 17:35:17 +08:00
xxx for i in range(n)这条语句首先是重复 xxx n 次,其次提供了 i 作为序号,如果你在 xxx
中需要的话可以引用这个序号 i ,如果不需要,可以写成 xxx for _ in range(n)。
shyrock
2022-11-22 17:36:51 +08:00
@foufoufm #3 你试一下就知道了,会生成 m*n*o*p 个元素。
foufoufm
2022-11-22 18:13:05 +08:00
@Alias4ck
@shyrock

这样我就懂了。。。 感谢已经送上
l4ever
2022-11-29 10:45:31 +08:00
既然是新手就先用正常写法写, 再转换成列表推导式
s = []
for i in range(3):
s.append([0]*3)

print(s)
foufoufm
2022-11-29 14:11:57 +08:00
@l4ever 学会了学会了, 感谢。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/897122

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX