当我使用字符串,列表和元组作为for循环中的迭代器时,请帮助我理解不同的输出。
在Python 2.7交互式提示符中,我在命令序列下运行:
>>> for x in 'spam':
... print x*2
...
输出:
SS
第
AA
毫米
>>> for x in ['spam']:
... print x*2
...
输出:
spamspam
>>> for x in ('spam'):
... print x*2
...
输出:
SS
第
AA
毫米
>>> for x in ('spam',):
... print x*2
...
输出:
spamspam
>>> for x in tuple('spam'):
... print x*2
...
输出:
SS
第
AA
毫米
答案 0 :(得分:1)
所以你的第一个例子:
记住字符串实际上并不存在于计算机中,它们实际上是数组/列表 - 所以实际上"spam"
计算机意味着['s', 'p', 'a', 'n']
第二个例子:
由于列表中只有一个项目,因此会对此列表中的项目执行for loop
第三个例子:
没有其他项目的郁金香被视为不可更改的字符串。
第四个例子: 具有多个条目的郁金香被视为不可更改的列表,保持其顺序和值。
我希望这有帮助,如果有人知道的话,不要羞于改变答案。
答案 1 :(得分:1)
答案 2 :(得分:1)
这对初学者来说是一个很好的问题,因为它有助于理解Python语法。以下是我的解释。
for x in 'spam': ...
这里的输入是str
,它支持迭代器协议。因此,当我们在其上运行for循环时,每个字符将一次返回一个。
for x in ['spam']: ...
此处从list
创建str
个单项。所以我们只迭代循环一次。
for x in ('spam'): ...
您可能会被误导认为您正在tuple
中创建str
。事实上,()
只不过是一个正常的括号。如果打算使用单个项创建元组,则下一个示例中将显示正确的语法。对于此示例,您将str
对象传递给for循环,它将逐个字符地迭代。
for x in ('spam',): ...
逗号很重要。它有助于告诉口译员创建单项tuple
。由于tuple
中只有一个项目,我们只遍历循环一次。
for x in tuple('spam'): ...
这实际上是从tuple
创建str
个项目。由于我们一次遍历一个str
个字符,我们最终会得到一个包含许多项目的元组,每个项目都是一个字符。事实上,list('spam')
也会采用这种方式,而不是['spam']
。