V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
foufoufm
V2EX  ›  Python

Python 列表推导式的新手问题

  •  
  •   foufoufm · 2022-11-22 16:33:09 +08:00 · 1921 次点击
    这是一个创建于 492 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在学习 Python ,有个基础语法表达不是很明白。

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

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

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

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

    这里有点不懂的是,这个 i 对象没有被左侧的表达所引用,为什么结果会出来呢?
    9 条回复    2022-11-29 14:11:57 +08:00
    RRRoger
        1
    RRRoger  
       2022-11-22 16:41:27 +08:00
    java js 都是这样的啊 这是 feature 并不是用到才会去迭代
    foufoufm
        2
    foufoufm  
    OP
       2022-11-22 16:44:09 +08:00
    @RRRoger 感谢回复,就是有点不明不白的哈哈
    foufoufm
        3
    foufoufm  
    OP
       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
        4
    Alias4ck  
       2022-11-22 17:20:00 +08:00   ❤️ 1
    你如果不想使用迭代对象得 话可以写成 [[0]* 3 for _ in range(3)]
    shyrock
        5
    shyrock  
       2022-11-22 17:35:17 +08:00   ❤️ 1
    xxx for i in range(n)这条语句首先是重复 xxx n 次,其次提供了 i 作为序号,如果你在 xxx
    中需要的话可以引用这个序号 i ,如果不需要,可以写成 xxx for _ in range(n)。
    shyrock
        6
    shyrock  
       2022-11-22 17:36:51 +08:00
    @foufoufm #3 你试一下就知道了,会生成 m*n*o*p 个元素。
    foufoufm
        7
    foufoufm  
    OP
       2022-11-22 18:13:05 +08:00
    @Alias4ck
    @shyrock

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

    print(s)
    foufoufm
        9
    foufoufm  
    OP
       2022-11-29 14:11:57 +08:00
    @l4ever 学会了学会了, 感谢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3273 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 11:51 · PVG 19:51 · LAX 04:51 · JFK 07:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.