Python String,List和Tuple表现不同

时间:2016-10-23 04:57:56

标签: python list for-loop iterator tuples

当我使用字符串,列表和元组作为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
毫米

3 个答案:

答案 0 :(得分:1)

所以你的第一个例子

记住字符串实际上并不存在于计算机中,它们实际上是数组/列表 - 所以实际上"spam"计算机意味着['s', 'p', 'a', 'n']

第二个例子

由于列表中只有一个项目,因此会对此列表中的项目执行for loop

第三个例子

没有其他项目的郁金香被视为不可更改的字符串。

第四个例子:   具有多个条目的郁金香被视为不可更改的列表,保持其顺序和值。

我希望这有帮助,如果有人知道的话,不要羞于改变答案。

答案 1 :(得分:1)

  1. '垃圾邮件'或者('垃圾邮件')都是字符串,因此您在每个字符串上进行迭代
  2. ['垃圾邮件']是一个字符串列表,因此迭代就会输出一个字符串(' spam',)
  3. 元组('垃圾邮件')正在生成一个由字符串中的字符组成的元组(' s'' p'' a& #39;,' m')所以输出很明显

答案 2 :(得分:1)

这对初学者来说是一个很好的问题,因为它有助于理解Python语法。以下是我的解释。

  1. for x in 'spam': ...
  2. 这里的输入是str,它支持迭代器协议。因此,当我们在其上运行for循环时,每个字符将一次返回一个。

    1. for x in ['spam']: ...
    2. 此处从list创建str个单项。所以我们只迭代循环一次。

      1. for x in ('spam'): ...
      2. 您可能会被误导认为您正在tuple中创建str。事实上,()只不过是一个正常的括号。如果打算使用单个项创建元组,则下一个示例中将显示正确的语法。对于此示例,您将str对象传递给for循环,它将逐个字符地迭代。

        1. for x in ('spam',): ...
        2. 逗号很重要。它有助于告诉口译员创建单项tuple。由于tuple中只有一个项目,我们只遍历循环一次。

          1. for x in tuple('spam'): ...
          2. 这实际上是从tuple创建str个项目。由于我们一次遍历一个str个字符,我们最终会得到一个包含许多项目的元组,每个项目都是一个字符。事实上,list('spam')也会采用这种方式,而不是['spam']