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'),
来生成一个元组(即没有外圆括号)。