gpt4 book ai didi

python - 索引超出范围,但列表中有元素?

转载 作者:行者123 更新时间:2023-11-28 21:23:53 26 4
gpt4 key购买 nike

所以我一直在浏览此网站以尝试解决我的问题,但我认为没有人遇到我的具体问题?我想要做的是遍历并创建具有重复列表的排列。类似于如果我想要掷 4 面骰子 3 次的所有可能结果。我不知道我的代码是否真的会为此目的而工作,但手头的问题是:

我有这个代码:

ops = ["add", "sub", "mul", "div"]    
def opsy():
opslist=["cat", "dog", "cow"]
for w in ops:
opslist[0] = w
for x in ops:
opslist[1] = x
for y in ops:
opslist[2] = y
opsarray.append(opslist)

我得到这个错误:

IndexError: 'list assignment index out of range'

我的理解应该是因为 opslist 被定义为一个空列表,所以我改变了它(如上面的代码所示)但我仍然得到错误?我也不认为“append”不是我想要的,我需要能够更改特定索引,而不仅仅是添加一个项目。我也不想使用模块(itertools),我真的很想自己编程。非常感谢。

编辑:我不知道为什么我会出错?但无论如何,martineau 对 opsarray = [[w, x, y] for y in ops for x in ops for w in ops] 的评论对我想做的事情有效。所以是的。谢谢!

最佳答案

您的代码不会引发异常。但是,您确实遇到了一个不同的问题:您将相同的列表 (opslist) 添加到 opsarray 64 次,同时不断更改该列表。最后,您对同一个列表有 64 个引用:

>>> opsarray
[['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div'], ['div', 'div', 'div']]
>>> id(opsarray[0]) == id(opsarray[1])
True

您想创建新列表:

ops = ["add", "sub", "mul", "div"]    
def opsy():
for w in ops:
for x in ops:
for y in ops:
opsarray.append([w, x, y])

或者更好的是,使用 itertools.product() :

from itertools import product
opsarray = list(product(ops, repeat=3))

结果是:

[('add', 'add', 'add'), ('add', 'add', 'sub'), ('add', 'add', 'mul'), ('add', 'add', 'div'), ('add', 'sub', 'add'), ('add', 'sub', 'sub'), ('add', 'sub', 'mul'), ('add', 'sub', 'div'), ('add', 'mul', 'add'), ('add', 'mul', 'sub'), ('add', 'mul', 'mul'), ('add', 'mul', 'div'), ('add', 'div', 'add'), ('add', 'div', 'sub'), ('add', 'div', 'mul'), ('add', 'div', 'div'), ('sub', 'add', 'add'), ('sub', 'add', 'sub'), ('sub', 'add', 'mul'), ('sub', 'add', 'div'), ('sub', 'sub', 'add'), ('sub', 'sub', 'sub'), ('sub', 'sub', 'mul'), ('sub', 'sub', 'div'), ('sub', 'mul', 'add'), ('sub', 'mul', 'sub'), ('sub', 'mul', 'mul'), ('sub', 'mul', 'div'), ('sub', 'div', 'add'), ('sub', 'div', 'sub'), ('sub', 'div', 'mul'), ('sub', 'div', 'div'), ('mul', 'add', 'add'), ('mul', 'add', 'sub'), ('mul', 'add', 'mul'), ('mul', 'add', 'div'), ('mul', 'sub', 'add'), ('mul', 'sub', 'sub'), ('mul', 'sub', 'mul'), ('mul', 'sub', 'div'), ('mul', 'mul', 'add'), ('mul', 'mul', 'sub'), ('mul', 'mul', 'mul'), ('mul', 'mul', 'div'), ('mul', 'div', 'add'), ('mul', 'div', 'sub'), ('mul', 'div', 'mul'), ('mul', 'div', 'div'), ('div', 'add', 'add'), ('div', 'add', 'sub'), ('div', 'add', 'mul'), ('div', 'add', 'div'), ('div', 'sub', 'add'), ('div', 'sub', 'sub'), ('div', 'sub', 'mul'), ('div', 'sub', 'div'), ('div', 'mul', 'add'), ('div', 'mul', 'sub'), ('div', 'mul', 'mul'), ('div', 'mul', 'div'), ('div', 'div', 'add'), ('div', 'div', 'sub'), ('div', 'div', 'mul'), ('div', 'div', 'div')]

关于python - 索引超出范围,但列表中有元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16848436/

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