任何人都可以解释一下为什么这行给我一个错误
['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']
不用手动编码吗?
干杯!
答案 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语法错误