从字符串对象初始化的List和Tuple

时间:2013-12-08 05:55:48

标签: python string python-2.7 python-3.x tuples

以下两者有何不同:

>>> s = 'string'
>>> tuple(s)
('s', 't', 'r', 'i', 'n', 'g')
>>> tuple([s])
('string',)
>>> tuple((s))
('s', 't', 'r', 'i', 'n', 'g')
>>> tuple((s,))
('string',)
>>>    

String是一个可迭代的对象,它解释为什么它在元组内部分裂成多个元素?

3 个答案:

答案 0 :(得分:4)

元组不是由括号决定的,它们由逗号决定:

>>> (1)
1
>>> (1,)
(1,)
>>> (1),
(1,)
>>> 1
1
>>> 1,
(1,)

删除中间括号直到确定表达式:

>>> tuple((((('string')))))
('s', 't', 'r', 'i', 'n', 'g')
>>> tuple((((('string'))),))
('string',)
>>> tuple((((('string'),)),))
(('string',),)

您可以看到Python如何使用ast

解析这些表达式
>>> import ast
>>> ast.literal_eval("((((('string')))))")
'string'
>>> ast.literal_eval("((((('string')))),)")
('string',)

并告诉您为什么tuple(('string'))tuple('string')相同。额外的括号不会创建元组,只是被解析器丢弃。

答案 1 :(得分:2)

如果你在一个字符串上调用tuple,或者在任何可迭代字符串上调用list就会发生同样的事情:循环通过"最深的" (第一维)可迭代的一部分。举几个例子:

>>> s = 'string'
>>> tuple(s)
('s', 't', 'r', 'i', 'n', 'g')
>>> tuple([s])
('string',)
>>>
>>> tuple((x for x in [s]))
('string',)

在第一个示例中,s中的第一个维度是字符串' string',因此元组从s获取每个值。在第二个示例中,第一个维度是列表s,其中包含变量s。在这种情况下,变量本身是第一维,因此整个字符串都是元组的。这也在最终的发电机箱中得到了证明。

答案 2 :(得分:1)

是。 list期待its parameter to be

  

可以是序列,支持迭代的容器,也可以是迭代器对象。

因此,它为字符串中的每个字符创建单独的字符串并返回列表。当您使用[](,)将其括起来时,您将创建一个字符串列表或字符串元组。因此,它的每个元素都被采用,并准备了一个新的列表。