0

0 2当我把它交给 Python 时,为什么会得到一个奇怪的结果?

#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)
4

2 回答 2

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

尽管通常人们确实在此处包含括号(元组的reprandstr总是如此),但这是为了样式而不是因为它们有意义。

于 2012-06-08T02:32:16.990 回答
5

(a)只是一种表达方式a,like (1+2)is just 1+2

如果您想要 1 项元组,请编写(a,). 顺便说一句,相同的语法适用于列表:[a,]. 还有函数参数列表。逗号分隔列表所在的任何地方都可以使用尾随逗号。

于 2012-06-08T02:30:35.823 回答