满足条件后,重新启动python中的嵌套循环



我有两个范围:范围_1(0,10(范围_2(11,40(

如果两个范围中任何两个元素的偶数,我想从上面的两个范围(range_1和range_2(创建一个元组列表

因此,来自范围_1的0和来自范围_2=12的12是偶数,与来自范围_1和来自范围2=14的1和13是偶数相同。

然而,我不想遍历范围_2中的所有元素。只需要5次成功的尝试,那么我必须立即回到range_1中的第二次迭代。

因此,对于第一次迭代:

(0, 12, 12), (0, 14, 14), (0, 16, 16), (0, 18, 18), (0, 20, 20)

然后我们进行第二次迭代:

(1, 11, 12), (1, 13, 14), (1, 15, 16), (1, 17, 18), (1, 19, 20)

依此类推,直到范围_1:中的9

(9, 11, 20), (9, 13, 22), (9, 15, 24), (9, 17, 26), (9, 19, 28)

这是我的代码,它遍历了所有元素,这显然是错误的,因为它遍历了range_2中的所有元素!


list_1 = []
for i in range(10):
for j in range(11,40):
if (i+j)%2 == 0:
list_1.append((i, j, (i+j)))

只需存储一个计数器,这样如果达到5,就可以跳出嵌套的for循环:

list_1 = []
for i in range(10):
counter = 0
for j in range(11,40):
if (i+j)%2 == 0:
list_1.append((i, j, (i+j)))
counter += 1
if counter == 5:
break

给出CCD_ 1为:

[(0, 12, 12), (0, 14, 14), (0, 16, 16), (0, 18, 18), (0, 20, 20),
(1, 11, 12), (1, 13, 14), (1, 15, 16), (1, 17, 18), (1, 19, 20),
(2, 12, 14), (2, 14, 16), (2, 16, 18), (2, 18, 20), (2, 20, 22),
(3, 11, 14), (3, 13, 16), (3, 15, 18), (3, 17, 20), (3, 19, 22),
(4, 12, 16), (4, 14, 18), (4, 16, 20), (4, 18, 22), (4, 20, 24),
(5, 11, 16), (5, 13, 18), (5, 15, 20), (5, 17, 22), (5, 19, 24),
(6, 12, 18), (6, 14, 20), (6, 16, 22), (6, 18, 24), (6, 20, 26),
(7, 11, 18), (7, 13, 20), (7, 15, 22), (7, 17, 24), (7, 19, 26),
(8, 12, 20), (8, 14, 22), (8, 16, 24), (8, 18, 26), (8, 20, 28),
(9, 11, 20), (9, 13, 22), (9, 15, 24), (9, 17, 26), (9, 19, 28)]

需要注意的是,这不是创建数据结构的最有效方法。显然,只会使用内部for循环中生成的其他j-值,这是浪费。

因此,您可以为2的循环指定j的步骤,以便只考虑其他j-值。但是,您现在必须小心起始值。如果你总是从11开始,以2为步长,那么你只会得到奇数的j-值,并且如果list_10是偶数,这些值永远不会与当前的i-值组合。因此,如果i是偶数,则必须更改循环的j,以便从12开始;如果i是奇数,则必须从11开始。

正如其他人所评论的,你可以通过构建适应你试图做的事情的范围来简化这个问题

[(i, j, i+j) for i in range(0, 10) for j in range((11 if i % 2 else 12), 21, 2)]

如果你在创建范围方面很聪明,你可以简化算法。使用步骤使范围每隔一个j跳过一次,根据i是否偶数调整开始,并将结束设置为21,因为它只会变得那么高。

list_1 = []
for i in range(10):
start = 12 if i % 2 == 0 else 11
for j in range(start, 21, 2):
list_1.append((i, j, i+j))
print(list_1[-5:])  # For testing

前两行输出:

[(0, 12, 12), (0, 14, 14), (0, 16, 16), (0, 18, 18), (0, 20, 20)]
[(1, 11, 12), (1, 13, 14), (1, 15, 16), (1, 17, 18), (1, 19, 20)]

最新更新