итерационное поведение, когда длина списка = 1 - PullRequest
0 голосов
/ 28 декабря 2011

Я новичок в python и у меня проблемы с циклическим поведением.В моем коде я читаю конфигурацию из файла, используя configobj.Содержимое конфигурационного файла является переменным, и именно здесь я вижу проблемы.

Вот мой тестовый код:

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

        for scenario in scenario_list:

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

Переменная "script_list" будет содержать любое количество строк.Когда у «names» есть несколько элементов, «script» устанавливается в значение каждого элемента, что нормально.Когда у «names» есть только 1 элемент, цикл перебирает каждый символ первой записи, нарушая мой код.

Итак, как мне получить цикл for просто для возврата значения записи в "scene_list"когда длина списка равна 1?

Заранее благодарим вас за любые советы.

1 Ответ

0 голосов
/ 28 декабря 2011

Вы используете кортежи, а не списки?

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 обрабатывает строки как списки (ну, больше как кортежи) символов. Таким образом, если вы перебираете строку, вы получаете отдельные символы (поведение, которое вы испытали). Следовательно, вы должны поместить вашу строку сценария в список (или кортеж), если хотите перебрать одну строку, а не ее символы. Если бы вы не использовали строки, вы бы увидели ошибку во время выполнения.

...