3

t为什么在访问元素时存在这种差异tuple

>>> t = [('ID','int')]
>>> for r in t:
print r


('ID', 'int')


t = (('ID','int'))
>>> for r in t:
print r


ID
int

我希望这与第一个示例完全相同!使用多个元素填充元组时,行为会发生变化。

>>> t = (('ID','int'),('DEF','str'))
>>> for r in t:
print r


('ID', 'int')
('DEF', 'str')
>>> t = [('ID','int'),('DEF','str')]
>>> for r in t:
print r


('ID', 'int')
('DEF', 'str')

有人可以给出一个简短的解释吗?我正在运行 python 2.7

4

2 回答 2

14

(('a', 'b'))是一样的('a', 'b')

你其实想要(('a', 'b'),)

这记录在这里:

5.13。表达式列表

expression_list ::= expression ( "," expression )* [","]

包含至少一个逗号的表达式列表产生一个元组。元组的长度是列表中表达式的数量。表达式从左到右计算。

尾随逗号仅用于创建单个元组(也称为单例);在所有其他情况下它是可选的。没有尾随逗号的单个表达式不会创建元组,而是产生该表达式的值。(要创建一个空元组,请使用一对空括号:()。)

请记住,如果没有这个限制,表达式(3) * (4)应该是两个数字的乘积,还是两个元组?大多数用户会期望这是数字的乘法。

于 2012-09-19T14:05:03.490 回答
4
t = [('ID','int')]

是列表中的一个元组。

t = (('ID','int'))

是一个带有括号的元组。

t = ('ID','int'),

是元组中的元组。

使,元组!元组周围的括号只是为了避免歧义。

于 2012-09-19T14:07:12.463 回答