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

Python 访问元组和列表元素的差异,python,list,tuples,Python,List,Tuples,为什么在将t的元素设置为元组时访问它会有这种差异 >>> 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'

为什么在将
t
的元素设置为
元组时访问它会有这种差异

>>> 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

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

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

这里记录了这一点:

表达式\u列表::=表达式(“,”表达式)*[“,”]

包含至少一个逗号的表达式列表将生成一个元组。元组的长度是列表中表达式的数量。表达式从左到右求值

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

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

t = [('ID','int')]
是列表中的元组

t = (('ID','int'))
是一个用括号括起来的元组

t = ('ID','int'),
是元组中的一个元组


组成元组!元组周围的括号仅用于避免歧义。

当您开始在答案框中键入内容,然后看到“此问题有一个新答案…”时,您不讨厌它吗?(+1)@larsvegas:我已经添加了python规范中的推理。我明白了,谢谢。反正很烦人。至少字符串格式变得更好了,不需要在每次执行类似
'%saaa'(elemnt,)
@larsvegas:正如@Jochen Ritzel的回答所指出的,您真正需要的是
t=('ID','int'),
来生成一个元组(即没有外圆括号)。