python - 尝试遍历字符串中的字符时 Python 的行为

标签 python string python-3.x for-loop iteration

我正在尝试使用 for 循环遍历以下字符串:

>>> for a,b,c in "cat"
        print(a,b,c)

现在我打算做的是在一个物理行上单独打印出字符串中的每个字符,而不是我收到一个错误。我知道这很容易通过将字符串包含在列表运算符 [] 中来解决:

>>> for a,b,c in ["cat"]
        print(a,b,c)
c a t

但是有人可以解释为什么会这样吗?

最佳答案

您要告诉 for 扩展每个迭代值以分配给三个单独的变量:

for a,b,c in "cat":
#   ^^^^^ the target for the loop variable, 3 different names

但是,对字符串的迭代会生成一个包含单个字符的字符串,您不能将单个字符分配给三个变量:

>>> loopiterable = 'cat'
>>> loopiterable[0]  # first element
'c'
>>> a, b, c = loopiterable[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: not enough values to unpack (expected 3, got 1)

错误消息会告诉您为什么这不起作用;你不能从长度为 1 的字符串中取出三个值。

当您将字符串放入列表时,您改变了循环的内容。您现在有一个包含一个元素的列表,因此循环只迭代一次,单次迭代的值是字符串 'cat'。该字符串恰好有 3 个字符,因此可以分配给三个变量:

>>> loopiterable = ['cat']
>>> loopiterable[0]  # first element
'cat'
>>> a, b, c = loopiterable[0]
>>> a
'c'
>>> b
'a'
>>> c
't'

如果包含的字符串具有不同数量的字符,这仍然会失败:

>>> for a, b, c in ['cat', 'hamster']:
...     print(a, b, c)
...
c a t
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 3)

'hamster' 是7个字符,不是3个; 4 太多了。

正确的解决方案是只为循环目标使用一个变量,而不是 3 个:

for character in 'cat':
    print(character)

现在您要分别打印每个字符:

>>> for character in 'cat':
...     print(character)
...
c
a
t

现在,如果您想将字符串的所有字符作为单独的参数传递给 print(),只需使用 * 来扩展字符串以分隔调用的参数:

>>> my_pet = 'cat'
>>> print(*my_pet)
c a t

关于python - 尝试遍历字符串中的字符时 Python 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43308371/

相关文章:

Python Kivy 不会使用 SDL2,坚持使用 pygame

php - 未以正确的格式从 python 脚本返回代码

python - Pyparsing - 查找嵌套多项式

java - 在Java中过滤一串不需要的字符

c - 在c中使用指针反转字符串

python - python 和 PyQt5 中的 Quamash QventLoop "RuntimeError: no running event loop"错误

python - PyAutoGUI 图像识别 - 像素颜色匹配的小问题

python - Flask:request.form ["xxxxx"]、request.form.get ("xxxxxx")和request.args.get ("xxxxx")之间的区别?

java - 将 ASCII art 添加到 Java 字符串中

python - 为什么数据类不能在其类属性声明中具有可变默认值?