为什么在将此内容提交给Python时会得到一个奇怪的0 2
结果?
#tuples ~wtF?
a=()
b=(a)
c=(a,1)
len(b)
len(c)
注意:我得到了列表的预期1 2
结果:
a=[]
b=[a]
c=[a,1]
len(b)
len(c)
这种情况发生在Linux上:
$ python --version
Python 2.7.2+
这是因为,
作业中的c=(a,1)
会以某种方式出现吗?
>>> print b
()
>>> print c
((), 1)
答案 0 :(得分:6)
括号不会使它成为元组 - 逗号可以。考虑:
>>> 5 * (3 + 2)
25
括号中的意思是“先做这个”。括号:
b=(a)
意思相同。所以,这相当于
b = a
所以b is a
将是True
。
要使b
包含空元组的元组,您需要执行以下操作:
b = a,
同样,括号不会使它成为元组(除了()
的特殊情况是空元组),逗号就是。
编辑,
c = (a, 1)
自a = ()
以来,这与:
c = ((), 1)
即,它是一个包含空元组和1
的元组。 ()
始终是空元组(与[]
相同的是空列表),但这只是括号表示'元组'的唯一时间。以上内容与:
c = (), 1
虽然通常人们在这里包括括号(以及元组的repr
和str
总是如此),但这是为了风格而不是因为它们是有意义的。
答案 1 :(得分:5)
(a)
只是一个表达式a
,就像(1+2)
只是1+2
一样。
如果你想要1项元组,你可以写(a,)
。
BTW相同的语法适用于列表:[a,]
。并且还有函数参数列表。在逗号分隔列表所在的任何地方都可以使用尾随逗号。