列表长度= 1时的itration行为

时间:2011-12-28 12:54:29

标签: python-2.6

我对python很新,并且遇到for循环行为的问题。在我的代码中,我使用configobj从文件中读取配置。配置文件的内容是可变的,这是我看到问题的地方。

这是我的测试代码:

if webconf.has_key(group):
        scenario_list = webconf[group]['Scenarios']['names']

        for scenario in scenario_list:

              print "Scenario name = %s\n" % scenario

" scenario_list"变量将包含任意数量的字符串。当'名字'有多个元素"场景"设置为每个元素的值,这很好。当"名字"只有1个元素,然后循环迭代第一个条目的每个字符,破坏了我的代码。

那么,如何让for循环只返回" scenario_list"中的条目值。当列表长度为1?

提前感谢您提供任何建议。

1 个答案:

答案 0 :(得分:0)

您使用的是元组而不是列表吗?

aTuple = (1,2,3)
aList = [1,2,3]

元组和列表之间的最大区别在于元组是不可变的,列表是可变的。也就是说,使用列表,您可以更改列表的元素,甚至添加和删除元素。

您可能遇到的问题与称为元组解包的概念有关。

aList = [0] # aList is now [0]
notATuple = (0) # notATuple is now 0 
# there was exactly one element in the tuple, so it was unpacked in the variable
aTuple = (0,) # aTuple is now (0,) - a tuple with one element
# the comma indicates that you wish that the tuple should not be unpacked

我想到的唯一另一个问题是,当您只有一个场景时,您没有将场景字符串放在列表或元组中。 Python处理字符串之类的字符串(好吧,更像是元组)。因此,如果您遍历字符串,则会获得单个字符(您遇到的行为)。因此,如果要迭代一个字符串而不是字符,则必须将场景字符串放在列表(或元组)中。如果你没有使用字符串,你会看到运行时错误。