迭代时将字符串视为字符组

时间:2017-01-12 17:22:25

标签: python data-structures

首先,当我发现这个问题时,我已经解决了我的问题: in python: iterate over each string in a list

当我迭代一个"列表"最初我得到了我认为奇怪的行为。用一根绳子。在这些实例中,字符串被视为一组字符,迭代按顺序返回字符串中的每个字符。

对Python不熟悉,我没有意识到使用[]和()来定义列表有一些严格的区别。我的列表定义是使用()。但是,当列表包含多个字符串时,迭代将按顺序返回每个完整的字符串。举例说明:

list = ('string')
for i in list:
    print i

输出:

s
t
r
i
n
g

但是如果我这样做,那就是在()组中添加第二个字符串:

list = ('string','another string')
for i in list:
    print i

它被视为我使用[](因为你应该)。输出:

string
another string

现在,如果我使用[]来定义我的列表,我会得到预期的行为,这就是我现在正在做的事情。我只是觉得这很有趣。

有人能指出一些文档来解释Python解释parens的方式,特别是相对于字符串吗?

我在数据结构的Python文档中没有看到任何内容: https://docs.python.org/3/tutorial/datastructures.html

谢谢!

2 个答案:

答案 0 :(得分:2)

那是因为括号没有定义列表。它们有时会定义元组(a, b),它们类似于列表,但即使在您提供的代码中,也不是元组。

('string')

是带括号的表达式。它的值是'string'

('string',)

是一个包含单个元素的1元组,字符串'string'

答案 1 :(得分:1)

在第一种情况下,括号是不明确的。你的意思是单个元素元组,还是指括号表达式? Python解析器假定括号表达式。然后你迭代字符串:

>>> li = ('string')
>>> li
'string'

这与创建列表文字或使用单个字符串文字设置文字相反,因为没有含糊不清的含义:

>>> ['string']
['string']
>>> {'string'}
set(['string'])

在第二种情况下,您正在创建一个包含两个元素的元组,然后迭代该元组:

>>> li = ('string','another string')
>>> li
('string', 'another string')

如果您希望第一种情况与第二种情况一样,请添加逗号以创建一个元素元组:

>>> li = ('string',)
>>> li
('string',)

或者,您不必使用括号来定义元组:

>>> 'string','another string'
('string', 'another string')
>>> 'string',
('string',)

在这种情况下,元组构造函数是逗号,允许Python中的这个习惯用于交换没有临时变量的值:

>>> a='string'
>>> b='another string'
>>> a,b=b,a
>>> a
'another string'
>>> b
'string'

(请不要将list用作变量名。重新定义list函数...)