gpt4 book ai didi

python - 带有初始化值的嵌套 FOR 循环,但继续整个列表范围

转载 作者:太空宇宙 更新时间:2023-11-03 14:43:18 27 4
gpt4 key购买 nike

我试图在进程开始后以某个值继续我的嵌套 for 循环。但是在开始运行状态空间的其余部分的整个值范围之后。让我们看看我的例子:

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
list2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
list3 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
list4 = [1, 2, 3, 4, 5, 6, 7, 8, 9]

# 9 x 9 x 9 x 9 = 6561 total values
# Let's say we want to start from the 500th value
# This would mean:
# x=1, y=7, z=2, t=6

我尝试在 for 循环之前设置值,但是 for 循环只是重写了它们。我也尝试了下面的 range() ,但是这阻止了它的一切。有什么方法可以在某个迭代时初始化嵌套循环但保持空间范围??

counter = 0
list_of_names = []

for x in range(1, len(list1)):
for y in range(7, len(list2)):
for z in range(2, len(list3)):
for t in range(6, len(list4)):
Name = "A" + str(x) + " B" + str(y) + " C" + str(z) + " D" + str(t)
list_of_names.append(Name)
counter += 1
print(counter)
print(len(list_of_names))

我永远的感激之情,让我看看你的天才...

最佳答案

如果我明白你在找什么,你可以像这样修改你的代码:

for x in range(1, len(list1)):
for y in range(7 if x==1 else 0, len(list2)):
for z in range(2 if y==7 else 0, len(list3)):
for t in range(6 if z==2 else 0, len(list4)):

这很丑陋,但它会起作用:内部循环将第一次只覆盖 list2 的一部分,但从那时起将覆盖所有 list2

你可以把事情包装成一个函数,它有四个列表和四个起始值,或者一个函数有 N 个列表和 N 个起始值,或者更好的是,一个函数有 N 个列表和一个整体起始值,并且做divmod 计算 N 个起始值。


但是,似乎有一个更简单的解决方案。不用执行 divmod 算法,只需将整个迭代合并到一个循环中 itertools.product :

for x, y, z, t in product(range(len(list1)), range(len(list2)), range(len(list3)), range(len(list4)):

……或者也许:

for x, y, z, t in product(*(range(len(l)) for l in (list1, list2, list3, list4))):

... 或者,更好的是,遍历列表本身而不是它们的索引:

for x, y, z, t in product(list1, list2, list3, list4):

最后的更改不适用于您现有的代码,因为您似乎想要打印出索引而不是列表成员……但通常如果您使用列表进行迭代,您需要实际的列表成员。

无论哪种方式,您都可以通过 islice 跳过前 500 个:

for x, y, z, t in islice(product(list1, list2, list3, list4), 500, None):

关于python - 带有初始化值的嵌套 FOR 循环,但继续整个列表范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51576511/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com