以下两者有何不同:
>>> 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是一个可迭代的对象,它解释为什么它在元组内部分裂成多个元素?
答案 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
可以是序列,支持迭代的容器,也可以是迭代器对象。
因此,它为字符串中的每个字符创建单独的字符串并返回列表。当您使用[]
或(,)
将其括起来时,您将创建一个字符串列表或字符串元组。因此,它的每个元素都被采用,并准备了一个新的列表。