问题标签 [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.
python - Django 组合可变数量的查询集
有没有办法将未知数量的查询集连接到一个列表中?
这是我的模型:
我正在处理两种类型的查询:
items = Item.objects.filter(brands__in=brands)
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 与可变数量的查询一起使用。
有谁知道实现这一目标的最佳方法?
编辑:忘了提,我正在寻找的是具有特定品牌或具有所有必需标签的物品。
python - 使用itertools 降低四个“for”stmt 的复杂度?
我列出了 4 个列表:
list1_item, list2_item, list3_item, list4_item
我可以通过以下代码按顺序列出所有项目组合:
我可以知道我是否可以通过itertools
模块完成这项工作吗?
谢谢
python - 具有唯一值的排列
itertools.permutations 生成其元素根据其位置而不是其值被视为唯一的位置。所以基本上我想避免这样的重复:
事后过滤是不可能的,因为在我的情况下排列的数量太大。
有人知道合适的算法吗?
非常感谢你!
编辑:
我基本上想要的是以下内容:
这是不可能的,因为sorted
创建了一个列表并且 itertools.product 的输出太大。
对不起,我应该描述实际问题。
python - Python如何一次读取N行
我正在编写一个代码来一次获取一个巨大的文本文件(几 GB)N 行,处理该批处理,然后移动到接下来的 N 行,直到我完成整个文件。(我不在乎最后一批是否不是完美的尺寸)。
我一直在阅读有关使用 itertools islice 进行此操作的信息。我想我已经完成了一半:
麻烦的是我想处理下一批 16 行,但我错过了一些东西
python - 防止 itertools.permutation 中的内存错误
首先,我想提一下我有一个 3 GB 的内存。
我正在研究一种在节点上呈指数增长的算法,因此我在代码中有
它生成列表中的所有顶点组合,然后我可以处理其中一个排列。
但是,当我为 40 个顶点运行程序时,它会出现内存错误。
在实现中是否有任何更简单的方法,通过它我可以生成顶点的所有组合并且不会出现此错误。
python - Django 模板中的 itertools.groupby
我在itertools.groupby
对查询集的元素进行分组时遇到了一个奇怪的问题。我有一个模型Resource
:
我的 sqlite 数据库中有几个资源:
所以如果我按类型分组,我自然会得到两个元组:
现在我的观点也有同样的逻辑:
但是当我在我的模板中迭代它时,缺少一些资源:
这呈现为:
我在想子迭代器已经被迭代了,但我不确定这是怎么发生的。
(使用 python 2.7.1,Django 1.3)。
(编辑:如果有人读到这个,我建议使用内置regroup
模板标签而不是使用groupby
.)
python - 具有可变增量的滑动窗口 - Python
我正在尝试使用 Python 中的滑动窗口函数来比较一个很长的值列表。我为滑动窗口功能找到的代码如下:
我的问题是,我将如何修改此代码,以便可以将窗口的增量(生成每个元组后移动的量)从 1 更改为更大的整数,例如 5 或 50?我知道如何改变窗口的大小,但不知道增量。谢谢!
python - 当 n % k > 0 时,将 n 长列表分成 k 长块的简单习惯用法?
在 Python 中,如果n是k (IOW, ) 的倍数,则很容易将n长的列表分成k大小的块。这是我最喜欢的方法(直接来自文档):n % k == 0
(诀窍是[iter(x)] * k
产生一个对同一个迭代器的k引用的列表,由 . 返回。然后通过调用迭代器的每个k个副本恰好一次来生成每个块。之前是必要的,因为期望将其参数作为“单独" 迭代器,而不是它们的列表。)iter(x)
zip
*
[iter(x)] * k
zip
我看到这个习语的主要缺点是,当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)
成语?”,但我认为这会让很多读者感到困惑。)
我惊讶于将列表分成大小均匀的块是多么容易,以及摆脱不需要的填充是多么困难(相比之下!),即使这两个问题看起来具有相当的复杂性。
python - 使用 itertools 创建一个选项矩阵
我正在尝试生成一个由 True 和 False 值组成的矩阵,它显示了给定数量选择的所有排列。因此,对于 5 种选择,您将获得以下输出。
我一直在研究使用 itertool 的排列和组合,但是这些在位置上起作用,而不是在导致重复的值上起作用。
我确信这个问题有一个标准算法,但我很难找到它的名字。
python - itertools 是线程安全的吗?
例如,如果我使用 创建一个迭代器chain
,我可以在多个线程上调用它吗?请注意,依赖 GIL 的线程安全是可以接受的,但不是可取的。
(请注意,这与这个问题有点不同,它处理生成器,而不是用 C 编写的迭代器)。