如函数式编程 HOWTO 中所述,要使用列表推导式创建元组列表,必须使用括号。特别是,这在以下引用的文档中有所表达。
为了避免在 Python 的语法中引入歧义,如果表达式 正在创建一个元组,它必须用括号括起来。
因此,例如:
[x, y for x in seq1 for y in seq2] # This is a syntex error
[(x, y) for x in seq1 for y in seq2] # This is a correct expression of list of tuples using list comprehension
Run Code Online (Sandbox Code Playgroud)
通过强制使用括号来表达使用列表推导式的元组列表可以避免什么歧义?
我在理解部分语法时遇到一些困难。特别是当元组()需要括号时。
例如下面这段代码:
c={'a':10,'b':1,'c':22,'d':10}
tup=a,b=4,5
print(a)
print(b)
print(tup)
newlist=[(x,y) for y,x in c.items()]
print(newlist)
Run Code Online (Sandbox Code Playgroud)
该代码的输出是:
4
5
(4, 5)
[(10, 'a'), (1, 'b'), (22, 'c'), (10, 'd')]
Run Code Online (Sandbox Code Playgroud)
当尝试从列表理解语句中的 x, y 中取出括号时,我得到了回溯。但是,此代码中的所有其他元组都不需要括号。
我缺少什么?为什么 Python 可以理解a,b为元组,但当x,y它位于列表理解语句中时却不能理解?
在我看来,Python 与元组语法不一致。我尝试将括号取出并放回去以了解语法的工作原理。