Как диапазон Python функционирует работа?

Или использование плагина блока Знатока (mvn assembly:assembly)

23
задан TreePath 22 October 2018 в 10:44
поделиться

6 ответов

«Цикл for» в большинстве, если не во всех, языках программирования - это механизм для выполнения части кода более одного раза.

Этот код:

for i in range(5):
    print i

можно представить себе работает так:

i = 0
print i
i = 1
print i
i = 2
print i
i = 3
print i
i = 4
print i

Итак, вы видите, что происходит не так, что i получает значение 0, 1, 2, 3, 4 одновременно , а скорее последовательно.

Я предполагаю, что когда вы говорите «вызовите a, он дает только 5», вы имеете в виду следующее:

for i in range(5):
    a=i+1
print a

это напечатает последнее значение, которое было дано. Каждый раз, когда цикл повторяется, оператор a = i + 1 перезаписывает последнее значение a новым значением.

Код в основном выполняется последовательно, сверху вниз, а цикл for - это способ заставить код вернуться и что-то еще, с другим значением для одной из переменных.

49
ответ дан 29 November 2019 в 00:45
поделиться
for i in range(5):

то же самое, что и

for i in [0,1,2,3,4]:
7
ответ дан 29 November 2019 в 00:45
поделиться

range (x) возвращает список чисел от 0 до x - 1.

>>> range(1)
[0]
>>> range(2)
[0, 1]
>>> range(3)
[0, 1, 2]
>>> range(4)
[0, 1, 2, 3]

for i in range (x): выполняет тело (которое является print i в вашем первом примере) один раз для каждого элемента в списке, возвращаемом range () . i используется внутри тела для ссылки на «текущий» элемент списка. В этом случае i относится к целому числу, но оно может быть любого типа, в зависимости от объекта, на котором выполняется цикл.

6
ответ дан 29 November 2019 в 00:45
поделиться

Функция range предоставит вам список чисел, а цикл for выполнит итерацию по списку и выполнит указанный код для каждого из его элементы.

for i in range(5):
      print i

Это просто выполняет print i пять раз, для i в диапазоне от 0 до 4.

for i in range(5):
      a=i+1

Это выполнит a = i + 1 пять раз. Поскольку вы перезаписываете значение a на каждой итерации, в конце вы получите только значение для последней итерации, то есть 4 + 1.

Полезные ссылки:
http: / /www.network-theory.co.uk/docs/pytut/rangeFunction.html
http://www.ibiblio.org/swaroopch/byteofpython/read/for-loop.html

0
ответ дан 29 November 2019 в 00:45
поделиться

Это зацикливается, вероятно, проблема в части печати ...

Если вы не можете найти логику, по которой система печатает, просто добавьте следующее туда, где вы хотите разместить контент:

for i in range(len(vs)):
    print vs[i]
    print fs[i]
    print rs[i]
0
ответ дан 29 November 2019 в 00:45
поделиться

Для сегментации слов в китайском языке и других сложных задач обработки естественного языка рассмотрите NLTK как хорошую отправную точку, если не полное решение - это богатый Python- набор инструментов на основе, особенно хорош для изучения методов обработки NL (и не редко достаточно хорош, чтобы предложить вам жизнеспособное решение некоторых из этих проблем).

что функция Python range () возвращает или генерирует последовательность. Это относительно продвинутое различие, которое обычно не представляет проблемы для новичка. В более старых версиях Python range () строил список (выделял для него память и заполнялся значениями) и возвращал ссылку на этот список. Это может быть неэффективно для больших диапазонов, которые могут потреблять довольно много памяти, а также для некоторых ситуаций, когда вы можете захотеть перебрать некоторый потенциально большой диапазон чисел, но с большой вероятностью " перерыв "выйти из цикла раньше (например, после того, как вы нашли какой-то конкретный предмет, который вас интересовал).

Python поддерживает более эффективные способы реализации той же семантики (выполнения одного и того же действия) с помощью программной конструкции, называемой генератором . Вместо выделения и заполнения всего списка и возврата его в виде статической структуры данных Python может создать экземпляр объекта с необходимой информацией (верхняя и нижняя границы и значение шага / приращения) ... и вернуть ссылку на него. Затем объект отслеживает, какое число он вернул последним, и вычисляет новые значения, пока не достигнет верхней границы (и в какой точке он сигнализирует об окончании последовательности вызывающей стороне с помощью исключения, называемого «StopIteration»). Этот метод (вычисление значений динамически, а не сразу сразу) называется «ленивым вычислением».

Другие конструкции в языке (например, те, что лежат в основе цикла for ) могут затем работать с этим объектом, как если бы это был список.

В большинстве случаев вам не нужно знать, есть ли ваша версия Python использует старую реализацию range () или более новую, основанную на генераторах. Вы можете просто использовать это и быть счастливым. Если вы работаете с диапазонами из миллионов элементов или создаете тысячи различных диапазонов из тысяч каждый, то можете заметить снижение производительности при использовании range () в старой версии Python. В таких случаях вы можете переосмыслить свой дизайн и использовать циклы while или создать объекты, реализующие семантику "ленивого вычисления" генератора, или используйте xrange () версию range () , если ваша версия Python включает ее, или функцию range () из версии Python, которая использует генераторы неявно.

Такие концепции, как генераторы и более общие формы ленивых вычислений, пронизывают программирование на Python, когда вы выходите за рамки основ. Обычно это вещи, которые вам не нужно знать для простых задач программирования, но которые становятся важными, когда вы пытаетесь работать с большими наборами данных или в более жестких ограничениях (например, время / производительность или границы памяти).

20
ответ дан 29 November 2019 в 00:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: