首先,当我发现这个问题时,我已经解决了我的问题: 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
谢谢!
答案 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
函数...)