Как работают эти python для цикла и нарезки?

  1. Как это заявление будет работать?

    j for i in range(5)
    

    Пример:

    x1=(j for i in range(5))
    

    даст пять 4 при повторении. Почему это не даст 01234, например, когда мы заменим j на i.

  2. Как работает это утверждение?

    a = [0, 1, 2, 3]
    for a[-1] in a:
        print(a[-1])
    0
    1
    2
    2
    
j for i in range(5) вызовет исключение, поскольку j не определено, и все, что делает ваш цикл for, — это изменение последнего значения a на текущее значение, которое повторяется циклом for, а затем печатает это значение.
Alexander 13.02.2023 07:10

Если вы получаете четыре 4 из первого примера, это просто означает, что j был ранее определен в вашем коде, и его значение оказалось равным 4.

Alexander 13.02.2023 07:16
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
62
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ваш первый пример представляет собой выражение генератора (круглые скобки обязательны, поэтому первая версия, которую вы показываете, на самом деле не имеет смысла). Выражение генератора неоднократно возвращает j, который не определен в коде, который вы показываете. Но, судя по вашему описанию, оно уже имеет значение 4 в среде, в которой вы тестировали, поэтому вы неоднократно видите это значение. Вы никогда не используете значение i, которое получает значения из range.

Что касается вашего другого цикла, for a[-1] in a продолжает перепривязывать последнее значение в списке, а затем печатать его.

Цикл for выполняет назначение цели, которую вы ему даете, между for и in. Обычно вы используете имя локальной переменной (например, i или j), но вы можете использовать более сложную цель присваивания, например self.index или, как в этом случае, a[-1]. Очень странно переписывать значение вашего списка, когда вы перебираете его, но это не запрещено.

Вы никогда не распечатаете 3, потому что каждое из предыдущих заданий по мере повторения перезаписывало его в списке. Последняя итерация не изменяет печатаемое значение, так как вы присваиваете a[-1] самому себе.

Ваш первый вопрос вызывает ошибку при повторении, так как j не определен. Если вы получаете какой-либо ответ от этого, вы, вероятно, определили значение для j над вашим генератором, которое звучит как 4 в вашем коде.

По поводу вашего второго вопроса:

когда у вас есть что-то вроде этого:

for i in a:
    ...

На самом деле вы делаете это в каждом цикле: i=a[0], i=a[1], ....

Когда вы пишете a[-1] in a, это примерно равно: a[-1]=a[0], a[-1]=a[1], ... и вы каждый раз меняете последний элемент a. Итак, в конце последним элементом вашего списка будет 2.

Да, это правильно. Я вижу, что использовал j ранее, и теперь это имеет смысл. Спасибо

dadi007 13.02.2023 08:20

Другие вопросы по теме