元组 a[0] 为何报错?

rocksy
  • 73

2.7
对于只有一个数的元组就会报错

>>> a = (5)
>>> a[0]
Runtime error 
Traceback (most recent call last):
  File "<string>", line 1, in <module>
TypeError: 'int' object has no attribute '__getitem__'
>>> 

对于多个数的元组就没问题

>>> a = (1,5)
>>> a[0]
1
回复
阅读 2.7k
5 个回答
✓ 已被采纳

楼上都没有说到重点,重点是python的元组是以逗号分隔的,括号并不表示元组.

s = 1,2,3,4
type(s)   # 打印出tuple

http://blog.csdn.net/topdogs/...

a = (5) 不是元组,a 就是int

元组应该这么写, a = (5, )

clipboard.png

这两个是不同的类型。
对于你a=(5),实际上等同于 a=5 .
自然是不支持迭代的。

python中,如果元组里面只有一个元素,那么python会认为你只是在一个普通括号中输入了一个值,它会默认这是字符串,你可以print打印查看一下

括号里面有多个元素才表示为元组,那么只有一个元素的元组怎么表示呢?可以写成:a = (5, )

如果你这么定义:

a = (5)

你定义的不是tuple,而是1这个数!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1。

所以,如果你要定义只有1个元素的tuple时,必须加一个逗号,,来消除歧义:

a = (5,)

另外,Python在显示只有1个元素的tuple时,也会加一个逗号“,”,以免你误解成数学计算意义上的括号。

你知道吗?

宣传栏