FOR循环的语法无效

时间:2018-10-11 06:32:44

标签: python arrays python-3.x list

任何人都可以解释一下为什么这行给我一个错误

['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的新手,我很好奇 为什么在尝试这一行代码时会产生“ 无效语法

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

是否有另一种方法来输出

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

不用手动编码吗?

干杯!

3 个答案:

答案 0 :(得分:1)

使用:

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

我怀疑这是因为Python看到了['foo', 'foo_{}'.format(s)并认为它只是一个列表。然后它看到for并突然感到困惑。

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

答案 1 :(得分:1)

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

[('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>]

答案 2 :(得分:1)

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

上面的实现是列表推导。您可以在这里查看详细信息,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)

由于第二个成员既不是适当的list元素,也不是List Comprehensions语法错误