【问题标题】:Invalid syntax of FOR loopFOR 循环的语法无效
【发布时间】:2019-03-16 03:48:40
【问题描述】:

谁能解释一下为什么这行给我一个错误

['foo', 'foo_{}'.format(s) for s in range(0,5)]

但当我喜欢这些时它可以正常工作:

['foo_{}'.format(s) for s in range(0,5)]

甚至

['foo', ['foo_{}'.format(s) for s in range(0,5)]]

当我这样做时,它会给我分配内存:

['foo', ('foo_{}'.format(s) for s in range(0,5))]

我正在学习 Python 并且是一名新手,我很好奇 为什么当我尝试这行代码时它会产生“Invalid Syntax

['foo', 'foo_{}'.format(s) for s in range(0,5)]

是否有另一种方法可以输出

Output: ['foo','foo_0','foo_1','foo_2','foo_3','foo_4']

不用手动编码?

干杯!

【问题讨论】:

标签: python arrays python-3.x list


【解决方案1】:

用途:

[('foo', 'foo_{}'.format(s)) for s in range(0,5)]

我怀疑这是因为 Python 看到 ['foo', 'foo_{}'.format(s) 并认为它只是一个列表。然后它看到for,顿时一头雾水。

如果您将'foo', 'foo_{}'.format(s) 括在括号中,则会消除歧义。

【讨论】:

    【解决方案2】:
    ['foo_{}'.format(s) for s in range(0,5)] 
    

    上面的实现是List Comprehensions。你可以在这里查看详细信息,https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions

    但是通过这样做:['foo', 'foo_{}'.format(s) for s in range(0,5)] 您正在破坏列表理解实现,实际上您正在定义一个列表,其第一个成员是'foo',另一个是'foo_{}'.format(s) for s in range(0,5)

    由于第二个成员既不是正确的列表元素,也不是发生列表理解语法错误

    【讨论】:

    • 感谢您的回答和来源。这很有帮助。认为我应该对此进行进一步研究。再次感谢!
    【解决方案3】:

    表达式a for b in c 不允许在a 中使用隐式tuple(逗号分隔的表达式未括在括号中)。这迫使您明确选择逗号组合的确切内容:

    [('foo', 'foo_{}'.format(s)) for s in range(0,5)]
    # [('foo', 'foo_0'), ('foo', 'foo_1'), ('foo', 'foo_2'), ('foo', 'foo_3'), ('foo', 'foo_4')]
    ['foo', ('foo_{}'.format(s) for s in range(0,5))]
    # ['foo', <generator object <genexpr> at 0x7fc2d41daca8>]
    

    【讨论】:

    • 谢谢!我非常感谢您的回答:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 2012-04-12
    • 2016-04-18
    相关资源
    最近更新 更多