差异访问元组和列表的元素

时间:2012-09-19 14:03:50

标签: python list tuples

为什么在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')

我希望这与第一个例子完全一样!尽管使用多个元素填充元组,行为也会发生变化。

{{1}}

有人可以简短解释一下吗?我正在运行python 2.7

2 个答案:

答案 0 :(得分:14)

(('a', 'b'))('a', 'b')相同。

您实际上想要(('a', 'b'),)

这里记录在案:

  

5.13. Expression lists

     

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

     

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

     

只需要创建一个元组(a.k.a.一个单例),就需要尾随逗号;在所有其他情况下它是可选的。没有尾随逗号的单个表达式不会创建元组,而是生成该表达式的值。 (要创建一个空元组,请使用一对空括号:()。)

请记住,没有这个限制,表达式(3) * (4)应该是两个数字或两个元组的乘法吗?大多数用户都希望这是数字的乘法。

答案 1 :(得分:4)

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

是列表中的元组。

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

是一个带有括号的元组。

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

是元组中的元组。

,制作元组!只需要一个元组周围的括号来避免歧义。