python - 为什么这个列表理解会抛出超出范围的错误

标签 python

我不太明白为什么这不起作用:

seq_ls = [s0] 
seq_ls.extend([((j*seq_ls[x-1] + k)%l) for x in range(1,100,1)])

但这确实:

seq_ls = [s0] 
for x in range(1,100,1):
    seq_ls.append(((j*seq_ls[x-1] + k)%l))

第一组代码给了我一个

IndexError: list index out of range

最佳答案

尝试删除 [] 的:

seq_ls.extend(((j*seq_ls[x-1] + k)%l) for x in range(1,100,1))

当你写的时候:

seq_ls.extend([((j*seq_ls[x-1] + k)%l) for x in range(1,100,1)])

您实际上是在构建所有元素的列表,然后将其传递给扩展。一旦 x 达到 2,这将失败,因为没有元素 seq_ls[2-1],因为它还没有被添加到 seq_ls

但是,如果删除括号,则扩展的参数将变为生成器表达式。在这种情况下,各个元素并非全部提前构建,而是一次只构建一个,因为它们被传递给 seq_ls.extend。在这种情况下,您的索引应该 有效,因为每个 x-1 元素都已添加。

关于python - 为什么这个列表理解会抛出超出范围的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45003088/

相关文章:

python - 使用 'for' 循环写入 Python 中的 CSV 文件

python - 查找边界之间错误颜色的像素

java - Python 结构体和读取 Java 中的值

python - `@numba.jitclass` ed 特殊方法去哪里了?

python - 仅将文件名的一部分替换为其文件夹名称

python - 如何仅使用 numpy 操作根据其他两个 numpy 数组的条件获取新的 numpy 数组?

Python:导入带参数的模块?

python - 在 Python 的 sqlite3 模块中更新行时如何处理可选参数?

python - 如何在python中指定每行中的字符数?

python - Pandas:如何从列中选择特定值并像在 SQL 中那样进行聚合?