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

2024-06-28 10:59:08 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我一直在浏览这个网站,试图解决我的问题,但我不认为有人有我的具体问题? 我要做的是遍历并创建列表的重复排列。类似于如果我想要所有可能的结果滚动一个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),我真的很想自己编程。 非常感谢。你知道吗

编辑: 我不知道为什么我会出错?但不管怎样,马蒂诺对opsarray = [[w, x, y] for y in ops for x in ops for w in ops]的评论对我想做的事情起了作用。所以是的。谢谢!你知道吗


Tags: 代码in目的add密码列表for网站
1条回答
网友
1楼 · 发布于 2024-06-28 10:59:08

您的代码不会引发异常。但是,您确实有一个不同的问题:您将同一个列表(opslist)添加到opsarray64次,同时不断更改该列表。最后,您对同一列表有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])

或者更好地使用^{}

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')]

相关问题 更多 >