Гарантируется ли, что приведенная ниже программа всегда выдает один и тот же результат?
s = 'fgvhlsdagfcisdghfjkfdshfsal'
for c in s:
print(c)
Гарантируется ли, что приведенная ниже программа всегда выдает один и тот же результат?
s = 'fgvhlsdagfcisdghfjkfdshfsal'
for c in s:
print(c)
Да, это так. Это связано с тем, что тип str
является неизменяемой последовательностью. Последовательности представляют собой конечный упорядоченный набор элементов (см. Последовательности в главу Модель данных Справочного руководства).
Итерация по заданной строке (любой последовательности) гарантированно всегда дает одни и те же результаты в одном и том же порядке для разных запусков интерпретатора CPython, версий CPython и реализаций Python.
Да. Внутри строка, которая у вас есть, хранится в массиве стиля c (в зависимости от реализации интерпретатора), являясь последовательным массивом данных, можно создать итератор. Чтобы использовать синтаксис for ... in ...
, вы должны иметь возможность итерировать по объекту после in. Строка предоставляет свой собственный итератор, который позволяет анализировать ее с помощью синтаксиса for in в последовательном порядке, как выполнить все последовательности Python.
То же самое верно для списков и даже настраиваемых объектов, которые вы создаете. Однако не все итерируемые объекты python обязательно будут в порядке или представляют значения, которые они хранят, ярким примером этого является словарь. Итерация словаря дает ключи, которые могут быть или не быть в том порядке, в котором вы их добавили (в зависимости от версии Python, которую вы используете среди прочего, поэтому не предполагайте, что она упорядочена, если вы не используете OrderedDict) вместо последовательных значений, таких как список кортежей и нить.
Да, это так. Над строкой цикл for перебирает символы по порядку. Это также верно для списков и кортежей — цикл for будет перебирать элементы по порядку.
Возможно, вы думаете о наборах и словарях. Они не определяют конкретный порядок, поэтому:
for x in {"a","b","c"}: # over a set
print(x)
for key in {"x":1, "y":2, "z":3}: # over a dict
print(key)
будет повторяться в каком-то произвольном порядке, который вы не можете легко предсказать заранее.
Посмотрите этот ответ Stack Overflow для получения дополнительной информации о том, какие гарантии даются в отношении заказ словарей и комплектов.
Да. Цикл for является последовательным.
Да, цикл всегда будет печатать каждую букву одну за другой, начиная с первого символа и заканчивая последним.