问题标签 [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.
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
有解决方法吗?提前致谢。
python-3.x - 对于大量边,如何在有向无环图中迭代从根节点到叶节点的每条路径
在我的原始程序中,我试图遍历edge_list
长度约为 70K 的所有路径。脚本永远不会出现(运行超过一天)有关如何加快此操作的任何提示?它适用于像下面这样的较小列表(长度 4)
尝试了函数式和迭代式编程。
函数式编程方法
迭代编程方法
输出 :
[[0, 1, 2], [0, 3, 2]]
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 算法,但我认为这将存在一个简单的选项来解决这个问题,但我没有找到它:(
谢谢!
python - 如何从 Python itertools 输出中删除字符串引号、逗号和括号?
这个漂亮的脚本生成给定 set 的所有 4 个字符排列s
,并将它们打印在新行上。
样本输出:
我不知道如何删除所有单引号、逗号和左/右括号。
期望的输出:
尝试添加:
错误: AttributeError: 'tuple' object has no attribute 'replace'
还尝试过:我似乎无法找到将print(' '.join())
逻辑放在哪里。
python - 如何使用 Python itertools.product() 引入约束?
以下脚本生成 4 个字符的 set 排列s
并输出到文件:
输出:
如何引入约束,例如:
- 没有排列应该以
'!'
- 第三个字符应该是
'3'
- 等等
python - 遍历多个列表时跳过特定列表中的迭代
这个问题有点类似于这个问题,但不同之处在于它需要多个列表:
我有三个列表:
我正在遍历列表,如下所示:
我想添加一个用以下伪代码表示的条件:
我怎么能做到这一点?itertools 中是否有可用于完成此任务的函数?
python - 如何优雅地生成可迭代的所有前缀?(累积迭代)
从一个可迭代对象中,我想生成其前缀的可迭代对象(包括原始可迭代对象本身)。
应该导致
或在
和
应该导致
或在
(空前缀是否是结果的一部分对我来说并不重要,内部或外部结果迭代的确切类型也不重要。)
我能够设计出几种方法来实现这一点,但都觉得至少有点笨拙:
使用切片和 len:
(如果 iterable 是一个序列则有效)
或使用列表理解:
...或生成器表达式
(这些不会产生空前缀。要包含它,请在上述任何一个中替换[i + 1]
为 just[i]
和range(len(seq))
by range(len(seq) + 1)
。)
这些感觉很笨重:
- 因为它们不适用于所有类型的可迭代输入
- 因为需要
+ 1
抵消 - 调用
range
某len
事(虽然enumerate
不会在这里变得更好)
使用连接
(不包括空前缀。这可以通过在-loopresult
之前产生一次来更改。)for
或使用itertools.accumulate
或者更具可读性:
(这两个包括空前缀。如果不需要,请删除它。)
由于需要将元素打包到长度为一的容器中,以便将它们连接到现有的容器,因此这些感觉很笨重。
更优雅的解决方案?
我觉得我必须从itertools
,中遗漏一些东西functools
,operator
或者more-itertools
这将允许稍微甚至明显不那么笨重的实现。我的意思是,这与它非常相似more_itertools.powerset
,只是它的一个非常具体的子集。
python - 仅使用部分数据预置
我有这个脚本,我想只使用排列的一部分怎么做?
我希望脚本的下一部分只使用不超过 10 的所有结果
其余的不要使用
如何做到这一点?基本上这是整个代码我不知道如何处理所有失败的尝试
我正在寻找仅从代码中使用的前十个 premutations
python - 在 Python 中,如何迭代给定列表的上一个、当前和下一个值?
我什至不知道从哪里开始为这个问题提供适当的标题。如果可以的话,请提出更好的建议。
我有一个要迭代的列表,但不是每次迭代处理 1 个值,而是要处理 3 个:
* 前一个值
* 当前值
* 下一个值
所以很明显我在这里使用了一些包装,即,对于第一次迭代,我使用列表中的最后一个值作为前一个值。同样,对于最后一次迭代,我使用列表中的第一个值作为下一个值。
例如,如果我的清单是:['abc', 'def', 'ghi', 'jkl']
迭代它的结果将是:
我提出了 2 个版本的通用函数,它们根据上述要求返回一个元组列表。
第一个从原始列表创建多个切片,然后使用 zip 创建元组列表。可能不是最节省内存的解决方案......
第二个使用 itertools 链和 islice 函数来做同样的事情,但不创建数组的多个副本。但是,由于迭代器的性质,我必须不断创建移位列表的新副本。那,它看起来很混乱,而且不是很pythonic。
我的问题是,是否有更 Pythonic 的方式使用不同的itertools函数或更好的 itertools 配方来做我想做的事。
两个函数都采用相同的参数
*the_list
要操作的值
*n
返回值中每个元组中的项目数
*offset
给定的位置数(正数或负数)以将原始输入移动
对于我们希望元组包含先前值的用例,需要移动输入。