Как работают эти 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 Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Привет, люди RPA, это снова я и я несу подарки! В очередном моем приключении о том, как создавать ботов для облегчения рутины. Вот, думаю, стоит...
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
Учебник по веб-скрапингу
Учебник по веб-скрапингу
Привет, ребята... В этот раз мы поговорим о веб-скрейпинге. Целью этого обсуждения будет узнать и понять, что такое веб-скрейпинг, а также узнать, как...
Тонкая настройка GPT-3 с помощью Anaconda
Тонкая настройка GPT-3 с помощью Anaconda
Зарегистрируйте аккаунт Open ai, а затем получите ключ API ниже.
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

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