Python нужна помощь в упрощении цикла for

Есть ли способ упростить длинный цикл for, который у меня есть в моем примере, с помощью нескольких вложенных циклов for? Я пишу в CSV в длинном цикле.

Вот длинный цикл с:

int_1 = 1
int_2 = 2
interface = 41
for i in range(1, 5):
    # t2-a-1
    writer.writerow(
        [
            f"t2-a-1 Twe1/0/{int_1}",
            f"t1-a-{i} Twe1/0/{interface}",
        ]
    )
    writer.writerow(
        [
            f"t2-a-1 Twe1/0/{int_2}",
            f"t1-a-{i} Twe1/0/{interface + 1}",
        ]
    )
    # t2-a-2
    writer.writerow(
        [
            f"t2-a-2 Twe1/0/{int_1}",
            f"t1-a-{i} Twe1/0/{interface + 2}",
        ]
    )
    writer.writerow(
        [
            f"t2-a-2 Twe1/0/{int_2}",
            f"t1-a-{i} Twe1/0/{interface + 3}",
        ]
    )
    # t2-a-3
    writer.writerow(
        [
            f"t2-a-3 Twe1/0/{int_1}",
            f"t1-a-{i} Twe1/0/{interface + 4}",
        ]
    )
    writer.writerow(
        [
            f"t2-a-3 Twe1/0/{int_2}",
            f"t1-a-{i} Twe1/0/{interface + 5}",
        ]
    )
    # t2-a-4
    writer.writerow(
        [
            f"t2-a-4 Twe1/0/{int_1}",
            f"t1-a-{i} Twe1/0/{interface + 6}",
        ]
    )
    writer.writerow(
        [
            f"t2-a-4 Twe1/0/{int_2}",
            f"t1-a-{i} Twe1/0/{interface + 7}",
        ]
    )
    int_1 += 2
    int_2 += 2

Результат, который мне нужен, должен выглядеть так:

t2-a-1 Twe1/0/1,t1-a-1 Twe1/0/41
t2-a-1 Twe1/0/2,t1-a-1 Twe1/0/42
t2-a-2 Twe1/0/1,t1-a-1 Twe1/0/43
t2-a-2 Twe1/0/2,t1-a-1 Twe1/0/44
t2-a-3 Twe1/0/1,t1-a-1 Twe1/0/45
t2-a-3 Twe1/0/2,t1-a-1 Twe1/0/46
t2-a-4 Twe1/0/1,t1-a-1 Twe1/0/47
t2-a-4 Twe1/0/2,t1-a-1 Twe1/0/48
t2-a-1 Twe1/0/3,t1-a-2 Twe1/0/41
t2-a-1 Twe1/0/4,t1-a-2 Twe1/0/42
t2-a-2 Twe1/0/3,t1-a-2 Twe1/0/43
t2-a-2 Twe1/0/4,t1-a-2 Twe1/0/44
t2-a-3 Twe1/0/3,t1-a-2 Twe1/0/45
t2-a-3 Twe1/0/4,t1-a-2 Twe1/0/46
t2-a-4 Twe1/0/3,t1-a-2 Twe1/0/47
t2-a-4 Twe1/0/4,t1-a-2 Twe1/0/48
t2-a-1 Twe1/0/5,t1-a-3 Twe1/0/41
t2-a-1 Twe1/0/6,t1-a-3 Twe1/0/42
t2-a-2 Twe1/0/5,t1-a-3 Twe1/0/43
t2-a-2 Twe1/0/6,t1-a-3 Twe1/0/44
t2-a-3 Twe1/0/5,t1-a-3 Twe1/0/45
t2-a-3 Twe1/0/6,t1-a-3 Twe1/0/46
t2-a-4 Twe1/0/5,t1-a-3 Twe1/0/47
t2-a-4 Twe1/0/6,t1-a-3 Twe1/0/48
t2-a-1 Twe1/0/7,t1-a-4 Twe1/0/41
t2-a-1 Twe1/0/8,t1-a-4 Twe1/0/42
t2-a-2 Twe1/0/7,t1-a-4 Twe1/0/43
t2-a-2 Twe1/0/8,t1-a-4 Twe1/0/44
t2-a-3 Twe1/0/7,t1-a-4 Twe1/0/45
t2-a-3 Twe1/0/8,t1-a-4 Twe1/0/46
t2-a-4 Twe1/0/7,t1-a-4 Twe1/0/47
t2-a-4 Twe1/0/8,t1-a-4 Twe1/0/48

Это то, что я пробовал, но это требует некоторой настройки:

int_1 = 1
int_2 = 2
interface = 41
for i in range(1, 5):
    for j in range(8):
        if j % 2 == 0:
            thisint = int_1
        else:
            thisint = int_2
        print(f"t2-a-1 Twe1/0/{thisint},t1-a-{i} Twe1/0/{interface + j}")
    int_1 += 2
    int_2 += 2

Что производит:

t2-a-1 Twe1/0/1,t1-a-1 Twe1/0/41
t2-a-1 Twe1/0/2,t1-a-1 Twe1/0/42
t2-a-1 Twe1/0/1,t1-a-1 Twe1/0/43
t2-a-1 Twe1/0/2,t1-a-1 Twe1/0/44
t2-a-1 Twe1/0/1,t1-a-1 Twe1/0/45
t2-a-1 Twe1/0/2,t1-a-1 Twe1/0/46
t2-a-1 Twe1/0/1,t1-a-1 Twe1/0/47
t2-a-1 Twe1/0/2,t1-a-1 Twe1/0/48
t2-a-2 Twe1/0/3,t1-a-2 Twe1/0/41
t2-a-2 Twe1/0/4,t1-a-2 Twe1/0/42
t2-a-2 Twe1/0/3,t1-a-2 Twe1/0/43
t2-a-2 Twe1/0/4,t1-a-2 Twe1/0/44
t2-a-2 Twe1/0/3,t1-a-2 Twe1/0/45
t2-a-2 Twe1/0/4,t1-a-2 Twe1/0/46
t2-a-2 Twe1/0/3,t1-a-2 Twe1/0/47
t2-a-2 Twe1/0/4,t1-a-2 Twe1/0/48
t2-a-3 Twe1/0/5,t1-a-3 Twe1/0/41
t2-a-3 Twe1/0/6,t1-a-3 Twe1/0/42
t2-a-3 Twe1/0/5,t1-a-3 Twe1/0/43
t2-a-3 Twe1/0/6,t1-a-3 Twe1/0/44
t2-a-3 Twe1/0/5,t1-a-3 Twe1/0/45
t2-a-3 Twe1/0/6,t1-a-3 Twe1/0/46
t2-a-3 Twe1/0/5,t1-a-3 Twe1/0/47
t2-a-3 Twe1/0/6,t1-a-3 Twe1/0/48
t2-a-4 Twe1/0/7,t1-a-4 Twe1/0/41
t2-a-4 Twe1/0/8,t1-a-4 Twe1/0/42
t2-a-4 Twe1/0/7,t1-a-4 Twe1/0/43
t2-a-4 Twe1/0/8,t1-a-4 Twe1/0/44
t2-a-4 Twe1/0/7,t1-a-4 Twe1/0/45
t2-a-4 Twe1/0/8,t1-a-4 Twe1/0/46
t2-a-4 Twe1/0/7,t1-a-4 Twe1/0/47
t2-a-4 Twe1/0/8,t1-a-4 Twe1/0/48

Как я могу настроить упрощенный код, чтобы он делал то, что я хочу?

Обратите внимание, что ваш предполагаемый вывод не соответствует исходному коду. interface должно увеличиваться постепенно, но его вывод следует шаблону int_1 и int_2, и наоборот. Фактический результат вашего скорректированного кода соответствует исходному коду. Поэтому неясно, какой результат вы действительно хотите, поскольку первоначальный пример неверен.

9769953 15.02.2023 14:15

@Ryan Вы уверены, что вывод, который вы показываете в своем вопросе, именно тот, который вам нужен? На самом деле вывод вашего длинного цикла for - это не тот вывод, который вы показываете в вопросе.

frankfalse 15.02.2023 15:43

@frankfalse Я обновил вывод длинного цикла.

Ryan Bell 15.02.2023 19:20
Потяните за рычаг выброса энергососущих проектов
Потяните за рычаг выброса энергососущих проектов
На этой неделе моя команда отменила проект, над которым я работал. Неделя усилий пошла насмарку.
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Привет, люди RPA, это снова я и я несу подарки! В очередном моем приключении о том, как создавать ботов для облегчения рутины. Вот, думаю, стоит...
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
Учебник по веб-скрапингу
Учебник по веб-скрапингу
Привет, ребята... В этот раз мы поговорим о веб-скрейпинге. Целью этого обсуждения будет узнать и понять, что такое веб-скрейпинг, а также узнать, как...
1
3
69
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Учитывая ваш вывод, вы могли бы использовать:

interface = 41
for i in range(4):
    for j in range(8):
        print(f't2-a-{i+1} Twe1/0/{j+1},t1-a-{j//2+1} Twe1/0/{interface+2*i+j%2}')

NB. используя print для быстрой воспроизводимости здесь, замените на writer.writerow в вашем контексте.

Выход:

t2-a-1 Twe1/0/1,t1-a-1 Twe1/0/41
t2-a-1 Twe1/0/2,t1-a-1 Twe1/0/42
t2-a-1 Twe1/0/3,t1-a-2 Twe1/0/41
t2-a-1 Twe1/0/4,t1-a-2 Twe1/0/42
t2-a-1 Twe1/0/5,t1-a-3 Twe1/0/41
t2-a-1 Twe1/0/6,t1-a-3 Twe1/0/42
t2-a-1 Twe1/0/7,t1-a-4 Twe1/0/41
t2-a-1 Twe1/0/8,t1-a-4 Twe1/0/42
t2-a-2 Twe1/0/1,t1-a-1 Twe1/0/43
t2-a-2 Twe1/0/2,t1-a-1 Twe1/0/44
t2-a-2 Twe1/0/3,t1-a-2 Twe1/0/43
t2-a-2 Twe1/0/4,t1-a-2 Twe1/0/44
t2-a-2 Twe1/0/5,t1-a-3 Twe1/0/43
t2-a-2 Twe1/0/6,t1-a-3 Twe1/0/44
t2-a-2 Twe1/0/7,t1-a-4 Twe1/0/43
t2-a-2 Twe1/0/8,t1-a-4 Twe1/0/44
t2-a-3 Twe1/0/1,t1-a-1 Twe1/0/45
t2-a-3 Twe1/0/2,t1-a-1 Twe1/0/46
t2-a-3 Twe1/0/3,t1-a-2 Twe1/0/45
t2-a-3 Twe1/0/4,t1-a-2 Twe1/0/46
t2-a-3 Twe1/0/5,t1-a-3 Twe1/0/45
t2-a-3 Twe1/0/6,t1-a-3 Twe1/0/46
t2-a-3 Twe1/0/7,t1-a-4 Twe1/0/45
t2-a-3 Twe1/0/8,t1-a-4 Twe1/0/46
t2-a-4 Twe1/0/1,t1-a-1 Twe1/0/47
t2-a-4 Twe1/0/2,t1-a-1 Twe1/0/48
t2-a-4 Twe1/0/3,t1-a-2 Twe1/0/47
t2-a-4 Twe1/0/4,t1-a-2 Twe1/0/48
t2-a-4 Twe1/0/5,t1-a-3 Twe1/0/47
t2-a-4 Twe1/0/6,t1-a-3 Twe1/0/48
t2-a-4 Twe1/0/7,t1-a-4 Twe1/0/47
t2-a-4 Twe1/0/8,t1-a-4 Twe1/0/48

Если ваш предполагаемый вывод правильный, вы можете просто использовать

thisint = 41
for i in range(1, 5):
    for j in range(8):
        print("t2-a-{i} Twe1/0/{j+1},t1-a-{j//2+1} Twe1/0/{thisint + j % 2}")
    thisint += 2

Я согласен с вами: вывод исходной программы отличается от вывода, который нужен ОП. Я написал программу с тем же выводом исходной программы, когда увидел ваш ответ и ответ Мозвея, поэтому я изменил свой отвечать.

frankfalse 15.02.2023 16:00

Следующий код использует цикл for 2 и делит элементы для вывода на 3 части:

  • first_element: это зависит от значения i и j
  • int_ значение: зависит только от j
  • interface_ (это зависит от значения interface и j)
interface = 41
for i in range(1, 5):
    for j in range(0, 8):

        # set the first_element
        first_element = f"t2-a-{i} Twe1/0/{j+1}"

        # set int_ value
        int_ = j//2 + 1

        # set interface value
        interface_ = interface + j%2

        print([first_element, f"t1-a-{int_} Twe1/0/{interface_}", ])
        #writer.writerow([first_element, f"t1-a-{int_} Twe1/0/{interface_}", ])

    interface += 2

Результат print() следующий:

['t2-a-1 Twe1/0/1', 't1-a-1 Twe1/0/41']
['t2-a-1 Twe1/0/2', 't1-a-1 Twe1/0/42']
['t2-a-1 Twe1/0/3', 't1-a-2 Twe1/0/41']
['t2-a-1 Twe1/0/4', 't1-a-2 Twe1/0/42']
['t2-a-1 Twe1/0/5', 't1-a-3 Twe1/0/41']
['t2-a-1 Twe1/0/6', 't1-a-3 Twe1/0/42']
['t2-a-1 Twe1/0/7', 't1-a-4 Twe1/0/41']
['t2-a-1 Twe1/0/8', 't1-a-4 Twe1/0/42']
['t2-a-2 Twe1/0/1', 't1-a-1 Twe1/0/43']
['t2-a-2 Twe1/0/2', 't1-a-1 Twe1/0/44']
['t2-a-2 Twe1/0/3', 't1-a-2 Twe1/0/43']
['t2-a-2 Twe1/0/4', 't1-a-2 Twe1/0/44']
['t2-a-2 Twe1/0/5', 't1-a-3 Twe1/0/43']
['t2-a-2 Twe1/0/6', 't1-a-3 Twe1/0/44']
['t2-a-2 Twe1/0/7', 't1-a-4 Twe1/0/43']
['t2-a-2 Twe1/0/8', 't1-a-4 Twe1/0/44']
['t2-a-3 Twe1/0/1', 't1-a-1 Twe1/0/45']
['t2-a-3 Twe1/0/2', 't1-a-1 Twe1/0/46']
['t2-a-3 Twe1/0/3', 't1-a-2 Twe1/0/45']
['t2-a-3 Twe1/0/4', 't1-a-2 Twe1/0/46']
['t2-a-3 Twe1/0/5', 't1-a-3 Twe1/0/45']
['t2-a-3 Twe1/0/6', 't1-a-3 Twe1/0/46']
['t2-a-3 Twe1/0/7', 't1-a-4 Twe1/0/45']
['t2-a-3 Twe1/0/8', 't1-a-4 Twe1/0/46']
['t2-a-4 Twe1/0/1', 't1-a-1 Twe1/0/47']
['t2-a-4 Twe1/0/2', 't1-a-1 Twe1/0/48']
['t2-a-4 Twe1/0/3', 't1-a-2 Twe1/0/47']
['t2-a-4 Twe1/0/4', 't1-a-2 Twe1/0/48']
['t2-a-4 Twe1/0/5', 't1-a-3 Twe1/0/47']
['t2-a-4 Twe1/0/6', 't1-a-3 Twe1/0/48']
['t2-a-4 Twe1/0/7', 't1-a-4 Twe1/0/47']
['t2-a-4 Twe1/0/8', 't1-a-4 Twe1/0/48']

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