Есть ли способ упростить длинный цикл 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
Как я могу настроить упрощенный код, чтобы он делал то, что я хочу?
@Ryan Вы уверены, что вывод, который вы показываете в своем вопросе, именно тот, который вам нужен? На самом деле вывод вашего длинного цикла for - это не тот вывод, который вы показываете в вопросе.
@frankfalse Я обновил вывод длинного цикла.
Учитывая ваш вывод, вы могли бы использовать:
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
Я согласен с вами: вывод исходной программы отличается от вывода, который нужен ОП. Я написал программу с тем же выводом исходной программы, когда увидел ваш ответ и ответ Мозвея, поэтому я изменил свой отвечать.
Следующий код использует цикл 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']
Обратите внимание, что ваш предполагаемый вывод не соответствует исходному коду. interface должно увеличиваться постепенно, но его вывод следует шаблону int_1 и int_2, и наоборот. Фактический результат вашего скорректированного кода соответствует исходному коду. Поэтому неясно, какой результат вы действительно хотите, поскольку первоначальный пример неверен.