问题标签 [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 投票
2 回答
3064 浏览

python - 在 Python 中结合 enumerate + itertools.izip

我想迭代 + 枚举 Python 中的两个列表。下面的代码看起来很难看。有没有更好的解决方案?

谢谢你。

0 投票
0 回答
222 浏览

python - Python中具有不可迭代类型的列表列表?

可能重复:
在 Python 中展平(不规则)列表列表

我在 SO 上看到了很多“如何展平列表列表”的问题,但我的问题仍然存在问题。我有一个具有不可迭代类型的列表列表,例如 NumPy float64 对象和整数。我的基本数据结构如下所示:

我一直在尝试像这样扁平化我的列表:

此代码抛出Type Errorfloat64 和整数不可迭代。如何展平具有不可迭代数据类型的列表?我想要的输出是:

谢谢您的帮助。

0 投票
3 回答
6709 浏览

python - 结合 itertools 和多处理?

我有一个256x256x256Numpy 数组,其中每个元素都是一个矩阵。我需要对这些矩阵中的每一个进行一些计算,并且我想使用该multiprocessing模块来加快速度。

这些计算的结果必须256x256x256像原来的那样存储在一个数组中,这样原数组中元素处的矩阵的结果就[i,j,k]必须放在[i,j,k]新数组的元素中。

为此,我想制作一个可以以伪方式编写的列表,[array[i,j,k], (i, j, k)]并将其传递给要“多处理”的函数。假设这matrices是从原始数组中提取的所有矩阵的列表,并且myfunc是进行计算的函数,代码看起来有点像这样:

但是,似乎map_async实际上是finput首先创建了这个巨大的列表:我的 CPU 并没有做太多事情,但是内存和交换在几秒钟内就被完全消耗掉了,这显然不是我想要的。

有没有办法将这个巨大的列表传递给多处理函数,而无需先显式创建它?或者你知道解决这个问题的另一种方法吗?

非常感谢!:-)

0 投票
1 回答
2120 浏览

csv - 如何在 python 3.2 中对 csv (dict)reader 对象进行分块?

我尝试使用多处理模块中的 Pool 来加快读取大型 csv 文件的速度。为此,我改编了一个示例(来自 py2k),但似乎 csv.dictreader 对象没有长度。这是否意味着我只能迭代它?有没有办法把它分块?

这些问题似乎相关,但并没有真正回答我的问题: csv.DictReader 中的行数如何在 Python 3 中分块列表?

我的代码试图这样做:

0 投票
1 回答
739 浏览

python - itertools 中的 izip_longest:迭代器内的索引错误如何工作?

这个问题中,@lazyr 询问以下izip_longest迭代器代码是如何工作

当我试图理解它是如何工作的时,我偶然发现了一个问题:“如果在作为参数IndexError发送到的那些迭代器之一中引发怎么办?”。izip_longest

然后我写了一些测试代码:

事实证明,itertools模块中的功能和izip_longest_from_docs工作方式不同。

上面代码的输出:

因此,可以清楚地看到,izip_longesfrom的代码itertools确实传播了IndexError异常(我认为它应该如此),但是izip_longes_from_docs“吞下了”IndexError异常,因为它把它作为sentinel停止迭代的信号。

我的问题是,他们是如何解决模块IndexError中代码的传播问题的itertools

0 投票
1 回答
225 浏览

python - 向 itertools.product 添加额外的状态

我已经查看了 itertools.permutations 和组合,但我认为它们不适用于我的问题。

基本上,我希望创建一个具有定义长度(大于元素数量)的给定字符串的所有可能排列的列表。

基本上,我想要三种可能的状态,0、1 或不关心 [0,1,'*']。

我曾希望做类似的事情:

但是,产品的第一个参数似乎不喜欢超过 2 个参数。

如果我尝试扩大排列或组合(即大于组合的数量),我最终会返回一个空数组。

0 投票
2 回答
499 浏览

python - 在 python 2.4 中模拟 itertools.product 的 Pythonic 方式

我有一个使用的 python 3 脚本itertools.product,但我需要能够在仅安装了 python 2.4 的机器上运行它。由于itertools.product是 python 2.6 中的新功能,我不再可以访问此功能。

如何itertools.product以 Python 的方式在 Python 2.4 中进行模拟?

0 投票
3 回答
246 浏览

python - 在输入迭代器的开头和结尾保留一个占位符的生成器完好无损

我们以一个列表为例:

255是其中的一个特殊值。这是一个占位符。

我制作了一个生成器,它替换了列表中的一些占位符。它按预期工作。

但我不需要处理开始占位符[255, 255和结束占位符255, 255, 255]并原封不动地产生它们。

所以,我试图修改生成器来解决它:

蟒蛇 2.7

转换为列表的中间值只是为了便于理解代码:

因此,如您所见,list(enumerate(window(it,2)))包含前导非占位符值的索引(0, ((**1**, 1), (4, 1))),,但它不包含初始迭代器有多少尾随占位符的信息:list(enumerate(window(it,2)))以该值结束,该值(6, ((15, 3), (**19**, 3)))仅具有最后一个非占位符的索引占位符值,它不提供剩余多少占位符的信息。

我设法通过依赖it = enumerate(iterable)哪个产生初始迭代器值的位置来处理领先的占位符,该初始迭代器值在第一个产生的值中持续存在ifilterfalse

但是我花了很多时间试图弄清楚如何对尾随占位符做同样的事情。问题是它ifilterfalse只是吞下了最后一个占位符值,enumerate(iterable)我看不到访问它们的方法(因为第一个生成的值ifilterfalse包含 的值的索引,所以领先的占位符是可能的enumerate(iterable))。

问题

纠正此代码以处理尾随占位符的最佳方法是什么?

由于目标不是通过任何方式创建代码(我已经使用不同的技术完成了它),我想通过修改代码来解决这个任务,而不是完全重写它。

与其说是真正的任务,不如说是一种训练。

附加信息

window这里的代码。

我的代码与@nye17的这个答案几乎相同。但是在这段代码中,作者对初始列表进行了就地修改。我想创建一个生成器,它将产生与该代码中的结果列表相同的值。

此外,我希望我的生成器接受任何可迭代作为参数,而不仅仅是列表(例如,它可以接受从文件中一一读取值的迭代器)。由于只有列表作为参数,任务变得更简单,因为我们可以从末尾扫描列表。

这不是我在生活中必须解决的真正任务。这只是为了训练。

完整代码 http://codepad.org/9UJ9comY

0 投票
1 回答
799 浏览

python - 将可迭代列表传递给 itertools 函数

我正在使用 itertools.product 功能。我有一个 2 深的嵌套列表,它是一个可迭代的列表。我想将此传递给产品功能,不知道如何正确格式化。

说清楚,我想要

但是从这样的nested_list输入生成

但相反我得到

0 投票
3 回答
2303 浏览

python - 在 python 中使用组合对象

  1. 我如何遍历 combObj ?

  2. 我怎样才能转换
    [(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]

    [[1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]]