跳过嵌套的 for 循环迭代 - Python

Skipping a nested for loop iteration - Python

首先,让我解释一下我正在尝试做什么。

我想使用列表中的字符串打印四边形(正方形)。像这样:

John
o  h
h  o
nhoJ

我得到了我想要的打印结果,除了我的 for 循环打印的比需要的多。我只需要根据实际字符串的长度跳过几个循环迭代。

这是我需要帮助的地方,在“quad_text”函数中:

for i in norm_list[1:-1]:           
            for j in reve_list[1:-1]:
                print(f"{i}{spaces}{j}")

我现在的输出结果:

---
John
o  h
o  o
h  h
h  o
nhoJ
---
Joe
o o
eoJ
---
David
a   i
a   v
a   a
v   i
v   v
v   a
i   i
i   v
i   a
divaD

完整代码

#Global Variables"
normal_list = ["John", "Joe", "David"]
#normal_list = ["Hey there buddy!"]

def initialization():
    rev_list = string_reverser()
    combined_lists = zip(normal_list, rev_list)
    quad_text(list(combined_lists))

def string_reverser():
    reversed_list = []
    for i in normal_list:
        reversed_list.append(i[::-1])
    return(reversed_list)

def quad_text(combined_lists):
    for (norm_list, reve_list) in combined_lists:
        print("---")
        print(norm_list)
        text_len = len(norm_list)
        spaces = (text_len - 2) *(" ")
        for i in norm_list[1:-1]: 
            for j in reve_list[1:-1]: # <--- Problem Area
                print(f"{i}{spaces}{j}")
        print(reve_list)

initialization()

不要使用嵌套循环,这会在正向和反向列表之间创建叉积。使用 zip() 将它们一起循环。

for i, j in zip(norm_list[1:-1], reve_list[1:-1]):
    print(f"{i}{spaces}{j}")