在 Python 3 中,我有一个元组:
a = ('aa', 'bb', 'cc', '|', 'dd', 'ee', 'ff')
我想将元组分成两个元组。元组必须在|
. 的索引|
不是静态的。预期结果:
a = ('aa', 'bb', 'cc',)
b = ('dd', 'ee', 'ff',)
使用分隔符将元组一分为二的最有效方法是什么?
我知道元组是不可变的,但情况需要我有点务实。
编辑:就我而言,将有 0 或 1 个分隔符 ( |
)。元组中的数据长度将超过 1。
正如评论中所建议的,您可以使用itertools.groupby
将元组细分为“非分隔符”和“分隔符”组,然后选择那些不是分隔符的组。这适用于任意数量的段,但如果您知道恰好有两个组,也可以将其解包为两个变量。
>>> a = ('a', 'b', 'c', '|', 'd', 'e', 'f', '|', 'g', 'h', 'i')
>>> [tuple(g) for k, g in itertools.groupby(a, key='|'.__eq__) if not k]
[('a', 'b', 'c'), ('d', 'e', 'f'), ('g', 'h', 'i')]
这也可以推广到允许不同的分隔符,例如使用groupby(a, key='|-'.__contains__)
.
关于评论:它的时间复杂度应该是 O(n),就像使用 时一样index
,如果您不知道在哪里拆分并且元组没有以任何方式排序,这也是您可以期望的最佳时间。但是请注意,这会groupby
带来一些开销,这使得该解决方案比使用 元组切片慢4-5 倍。不过,它仍然更通用,更容易适用于未知数量的组。 index
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句