问题标签 [itertools]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1375 浏览

python - Django 组合可变数量的查询集

有没有办法将未知数量的查询集连接到一个列表中?

这是我的模型:

我正在处理两种类型的查询:

  1. items = Item.objects.filter(brands__in=brands)

  2. items = Item.objects.filter(tags__name='80s').filter(tags__name='comedy')

对于第二种查询,用户可以保存搜索(例如“80年代喜剧”),并且可以同时保存多个搜索,所以我需要为他们保存的每个搜索创建一个查询。

我最初想尝试构建一个可以处理这两种情况的单个查询(请参阅Django Combining AND and OR Queries with ManyToMany Field),但我现在认为最好的方法是将所有查询组合到一个列表中。

我喜欢@akaihola 在这里建议的内容: 如何在 Django 视图中组合 2 个或更多查询集?但我不知道如何将 itertools.chain 与可变数量的查询一起使用。

有谁知道实现这一目标的最佳方法?

编辑:忘了提,我正在寻找的是具有特定品牌或具有所有必需标签的物品。

0 投票
2 回答
431 浏览

python - 使用itertools 降低四个“for”stmt 的复杂度?

我列出了 4 个列表:

list1_item, list2_item, list3_item, list4_item我可以通过以下代码按顺序列出所有项目组合:

我可以知道我是否可以通过itertools模块完成这项工作吗?

谢谢

0 投票
19 回答
53230 浏览

python - 具有唯一值的排列

itertools.permutations 生成其元素根据其位置而不是其值被视为唯一的位置。所以基本上我想避免这样的重复:

事后过滤是不可能的,因为在我的情况下排列的数量太大。

有人知道合适的算法吗?

非常感谢你!

编辑:

我基本上想要的是以下内容:

这是不可能的,因为sorted创建了一个列表并且 itertools.product 的输出太大。

对不起,我应该描述实际问题。

0 投票
6 回答
50078 浏览

python - Python如何一次读取N行

我正在编写一个代码来一次获取一个巨大的文本文件(几 GB)N 行,处理该批处理,然后移动到接下来的 N 行,直到我完成整个文件。(我不在乎最后一批是否不是完美的尺寸)。

我一直在阅读有关使用 itertools islice 进行此操作的信息。我想我已经完成了一半:

麻烦的是我想处理下一批 16 行,但我错过了一些东西

0 投票
2 回答
11219 浏览

python - 防止 itertools.permutation 中的内存错误

首先,我想提一下我有一个 3 GB 的内存。

我正在研究一种在节点上呈指数增长的算法,因此我在代码中有

它生成列表中的所有顶点组合,然后我可以处理其中一个排列。

但是,当我为 40 个顶点运行程序时,它会出现内存错误。

在实现中是否有任何更简单的方法,通过它我可以生成顶点的所有组合并且不会出现此错误。

0 投票
2 回答
4404 浏览

python - Django 模板中的 itertools.groupby

我在itertools.groupby对查询集的元素进行分组时遇到了一个奇怪的问题。我有一个模型Resource

我的 sqlite 数据库中有几个资源:

所以如果我按类型分组,我自然会得到两个元组:

现在我的观点也有同样的逻辑:

但是当我在我的模板中迭代它时,缺少一些资源:

这呈现为:

选择多个

我在想子迭代器已经被迭代了,但我不确定这是怎么发生的。

(使用 python 2.7.1,Django 1.3)。

(编辑:如果有人读到这个,我建议使用内置regroup模板标签而不是使用groupby.)

0 投票
3 回答
1591 浏览

python - 具有可变增量的滑动窗口 - Python

我正在尝试使用 Python 中的滑动窗口函数来比较一个很长的值列表。我为滑动窗口功能找到的代码如下:

我的问题是,我将如何修改此代码,以便可以将窗口的增量(生成每个元组后移动的量)从 1 更改为更大的整数,例如 5 或 50?我知道如何改变窗口的大小,但不知道增量。谢谢!

0 投票
4 回答
696 浏览

python - 当 n % k > 0 时,将 n 长列表分成 k 长块的简单习惯用法?

在 Python 中,如果nk (IOW, ) 的倍数,则很容易将n长的列表分成k大小的块。这是我最喜欢的方法(直接来自文档):n % k == 0

(诀窍是[iter(x)] * k产生一个对同一个迭代器的k引用的列表,由 . 返回。然后通过调用迭代器的每个k个副本恰好一次来生成每个块。之前是必要的,因为期望将其参数作为“单独" 迭代器,而不是它们的列表。)iter(x)zip*[iter(x)] * kzip

我看到这个习语的主要缺点是,当n不是k (IOW, n % k > 0) 的倍数时,剩下的条目就被遗漏了;例如:

还有一种替代习语,它的类型稍长,在 时产生与上述相同的结果n % k == 0,并且在 时具有更可接受的行为n % k > 0

至少,这里保留了剩余的条目,但最后一个块用None. 如果一个人只是想要一个不同的填充值,那么就itertools.izip_longest解决了这个问题。

但是假设所需的解决方案是最后一块未填充的解决方案,即

有没有一种简单的方法来修改map(None, *[iter(x)]*k)成语来产生这个结果?

(当然,通过编写一个函数来解决这个问题并不难(例如,参见对如何将列表拆分为大小均匀的块?什么是最“pythonic”的迭代分块列出?)。因此,这个问题的更准确的标题是“如何挽救map(None, *[iter(x)]*k)成语?”,但我认为这会让很多读者感到困惑。)

我惊讶于将列表分成大小均匀的块是多么容易,以及摆脱不需要的填充是多么困难(相比之下!),即使这两个问题看起来具有相当的复杂性。

0 投票
3 回答
1330 浏览

python - 使用 itertools 创建一个选项矩阵

我正在尝试生成一个由 True 和 False 值组成的矩阵,它显示了给定数量选择的所有排列。因此,对于 5 种选择,您将获得以下输出。

我一直在研究使用 itertool 的排列和组合,但是这些在位置上起作用,而不是在导致重复的值上起作用。

我确信这个问题有一个标准算法,但我很难找到它的名字。

0 投票
2 回答
2598 浏览

python - itertools 是线程安全的吗?

例如,如果我使用 创建一个迭代器chain,我可以在多个线程上调用它吗?请注意,依赖 GIL 的线程安全是可以接受的,但不是可取的。

(请注意,这与这个问题有点不同,它处理生成器,而不是用 C 编写的迭代器)。