Python while循环中的变量在for循环之后不递增

Python while循环中的变量在for循环之后不递增,python,for-loop,while-loop,increment,Python,For Loop,While Loop,Increment,我试图创建一个带有循环的字母表笛卡尔积。我有创建所需输出的for循环,但由于某种原因,while循环中的I从未到达 这个循环在jupyter实验室的笔记本中永远运行 lower_az = [chr(ord('a') + i) for i in range(26)] i=0 n=2 lst = lower_az.copy() final_list = [] while i < n: for let in lst: for j in range(26):

我试图创建一个带有循环的字母表笛卡尔积。我有创建所需输出的for循环,但由于某种原因,while循环中的I从未到达

这个循环在jupyter实验室的笔记本中永远运行

lower_az = [chr(ord('a') + i) for i in range(26)]
i=0
n=2
lst = lower_az.copy()
final_list = []
while i < n:
    for let in lst:
        for j in range(26):
            strng = let + lower_az[j]
            lst.append(strng)
    i += 1
    final_list.append(lst)

除非我遗漏了一些明显的东西,否则我应该增加变量,直到它达到n,并在所需字符串长度处停止while循环。

您正在更改正在迭代的列表。问题不是while循环,而是迭代let-in-lst时的lst.appendstrng

您正在更改正在迭代的列表。问题不是while循环,而是迭代let-in-lst时的lst.appendstrng

@blue\u注意是正确的-当您更改正在迭代的列表时,Python的表现不好

看起来这只是一个输入错误:您已经准备好接收元素的最终列表。要解决此问题,请更改:

            lst.append(strng)


并删除final_list.appendlst,您的程序就会正常运行。

@blue\u注意事项是正确的-当您更改正在迭代的列表时,Python不会正常运行

看起来这只是一个输入错误:您已经准备好接收元素的最终列表。要解决此问题,请更改:

            lst.append(strng)


然后放下final_list.appendlst,您的程序就会正常运行。

您的n=2。。。。不是26,对吗?正如blue_所指出的,列表lst在每次迭代中都会重新评估-随着lst在每次迭代中变长,循环会无限期地运行。如果允许您使用列表理解,您可以只使用[c1+c2表示下_az中的c1表示下_az中的c2表示下_az中的c2]。另一个选项是itertools.product.Your n=2。。。。不是26,对吗?正如blue_所指出的,列表lst在每次迭代中都会重新评估-随着lst在每次迭代中变长,循环会无限期地运行。如果允许您使用列表理解,您可以只使用[c1+c2表示下_az中的c1表示下_az中的c2表示下_az中的c2]。另一个选项是java工具。作为一个例外,C++和Java也会出现错误行为,当你改变一个重复的列表时,很难发现错误。由于迭代器的所有权和易变性规则,Rust在编译时捕获了它。谢谢,这个答案让我找到了我真正缺少的东西。在未来,建议初学者尝试解决你正在改变的列表的方法是递归函数。另外,C++和java也会出现错误,当你改变一个重复的列表时,很难发现错误。由于迭代器的所有权和易变性规则,Rust在编译时捕获了它。谢谢,这个答案让我找到了我真正缺少的东西。在将来,建议初学者尝试迭代正在更改的列表的解决方案是递归函数,这可能会很好。