问题标签 [more-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 投票
6 回答
117 浏览

python - 如何将嵌套的字符串列表转换为一个列表?

我想将嵌套的字符串列表转换为单个列表。例如,如果有一个类似的列表,

fruits = ['apple','orange, ['pineapple','grapes']]

我想将其转换为:

fruits = ['apple','orange','pineapple','grapes']

我尝试使用,more_itertools.chain.from_iterable(fruits)但我得到的输出是:

['a','p','p','l','e','o','r','a','n','g','e','pineapple','grapes']

即使尝试过[inner for item in fruits for inner in item],这也给出了与上面相同的输出。

我也试过[inner for item in fruits for inner in ast.literal_eval(item)],但这给出了一个错误ValueError: malformed string

有解决方法吗?提前致谢。

0 投票
0 回答
32 浏览

python-3.x - 对于大量边,如何在有向无环图中迭代从根节点到叶节点的每条路径

在我的原始程序中,我试图遍历edge_list长度约为 70K 的所有路径。脚本永远不会出现(运行超过一天)有关如何加快此操作的任何提示?它适用于像下面这样的较小列表(长度 4)

尝试了函数式和迭代式编程。

函数式编程方法

迭代编程方法

输出 : [[0, 1, 2], [0, 3, 2]]

0 投票
3 回答
161 浏览

python - 纯python或itertools按每个日期之间的天数对日期列表进行分组

有一个订购日期列表:

我希望组包含所有日期之间最多 30 天的日期(组的第一个元素与这些组的最后一个元素之间的距离将 <= 30 天

例如,使用前面的列表,我会得到:

  • group_1 = [datetime.date(2006, 8, 15), datetime.date(2006, 9, 12)](日期之间 <= 30 天)
  • group_2 = [datetime.date(2021, 4, 6), datetime.date(2021, 4, 16), datetime.date(2021, 4, 19)] <=30
  • group_3 = [datetime.date(2007, 8, 10)](没有其他相关日期 <= 30 天)

我尝试使用 iter-tools groupby 但关键功能不允许像“lambda x,y: (xy).days <= 30 ....”这样的 2 个日期比较我不知道我是否可以使用 groupby解决这个问题或者我需要其他的 itertools 功能。我知道我可以为它构建一个 python 算法,但我认为这将存在一个简单的选项来解决这个问题,但我没有找到它:(

谢谢!

0 投票
1 回答
40 浏览

python - 如何从 Python itertools 输出中删除字符串引号、逗号和括号?

这个漂亮的脚本生成给定 set 的所有 4 个字符排列s,并将它们打印在新行上。

样本输出:

我不知道如何删除所有单引号、逗号和左/右括号。

期望的输出:

尝试添加:

错误: AttributeError: 'tuple' object has no attribute 'replace'

还尝试过:我似乎无法找到将print(' '.join())逻辑放在哪里。

0 投票
4 回答
95 浏览

python - 如何使用 Python itertools.product() 引入约束?

以下脚本生成 4 个字符的 set 排列s并输出到文件:

输出:

如何引入约束,例如:

  • 没有排列应该以'!'
  • 第三个字符应该是'3'
  • 等等
0 投票
1 回答
30 浏览

python - 遍历多个列表时跳过特定列表中的迭代

这个问题有点类似于这个问题,但不同之处在于它需要多个列表:

我有三个列表:

我正在遍历列表,如下所示:

我想添加一个用以下伪代码表示的条件:

我怎么能做到这一点?itertools 中是否有可用于完成此任务的函数?

0 投票
3 回答
59 浏览

python - 如何优雅地生成可迭代的所有前缀?(累积迭代)

从一个可迭代对象中,我想生成其前缀的可迭代对象(包括原始可迭代对象本身)。

应该导致

或在

应该导致

或在

(空前缀是否是结果的一部分对我来说并不重要,内部或外部结果迭代的确切类型也不重要。)

我能够设计出几种方法来实现这一点,但都觉得至少有点笨拙:

使用切片和 len:

(如果 iterable 是一个序列则有效)

或使用列表理解:

...或生成器表达式

(这些不会产生空前缀。要包含它,请在上述任何一个中替换[i + 1]为 just[i]range(len(seq))by range(len(seq) + 1)。)

这些感觉很笨重:

  • 因为它们不适用于所有类型的可迭代输入
  • 因为需要+ 1抵消
  • 调用rangelen事(虽然enumerate不会在这里变得更好)

使用连接

(不包括空前缀。这可以通过在-loopresult之前产生一次来更改。)for

或使用itertools.accumulate

或者更具可读性:

(这两个包括空前缀。如果不需要,请删除它。)

由于需要将元素打包到长度为一的容器中,以便将它们连接到现有的容器,因此这些感觉很笨重。

更优雅的解决方案?

我觉得我必须从itertools,中遗漏一些东西functoolsoperator或者more-itertools这将允许稍微甚至明显不那么笨重的实现。我的意思是,这与它非常相似more_itertools.powerset,只是它的一个非常具体的子集。

0 投票
2 回答
46 浏览

python - 仅使用部分数据预置

我有这个脚本,我想只使用排列的一部分怎么做?

我希望脚本的下一部分只使用不超过 10 的所有结果

其余的不要使用

如何做到这一点?基本上这是整个代码我不知道如何处理所有失败的尝试

我正在寻找仅从代码中使用的前十个 premutations

0 投票
3 回答
44 浏览

python - 在 Python 中,如何迭代给定列表的上一个、当前和下一个值?

我什至不知道从哪里开始为这个问题提供适当的标题。如果可以的话,请提出更好的建议。

我有一个要迭代的列表,但不是每次迭代处理 1 个值,而是要处理 3 个:
* 前一个值
* 当前值
* 下一个值

所以很明显我在这里使用了一些包装,即,对于第一次迭代,我使用列表中的最后一个值作为前一个值。同样,对于最后一次迭代,我使用列表中的第一个值作为下一个值。

例如,如果我的清单是:['abc', 'def', 'ghi', 'jkl']

迭代它的结果将是:

我提出了 2 个版本的通用函数,它们根据上述要求返回一个元组列表。

第一个从原始列表创建多个切片,然后使用 zip 创建元组列表。可能不是最节省内存的解决方案......

第二个使用 itertools 链和 islice 函数来做同样的事情,但不创建数组的多个副本。但是,由于迭代器的性质,我必须不断创建移位列表的新副本。那,它看起来很混乱,而且不是很pythonic。

我的问题是,是否有更 Pythonic 的方式使用不同的itertools函数或更好的 itertools 配方来做我想做的事。

两个函数都采用相同的参数
*the_list要操作的值
*n返回值中每个元组中的项目数
*offset给定的位置数(正数或负数)以将原始输入移动

对于我们希望元组包含先前值的用例,需要移动输入。