在Python 3中我有一个元组:
a = ('aa', 'bb', 'cc', '|', 'dd', 'ee', 'ff')
Run Code Online (Sandbox Code Playgroud)
我想把元组分成两个元组.元组必须分为|.索引|不是静态的.预期结果:
a = ('aa', 'bb', 'cc',)
b = ('dd', 'ee', 'ff',)
Run Code Online (Sandbox Code Playgroud)
使用分频器将元组分成两部分的最有效方法是什么?
我知道元组是不可改变的,但情况要求我有点务实.
编辑:
在我的情况下,将有0或1个分隔符(|).元组中的数据长度大于1.
你可以找到'|' 使用index,你可以使用切片切片元组.
a = ('a', 'b', 'c', '|', 'd', 'e', 'f')
i = a.index('|')
a,b = a[:i],a[i+1:]
Run Code Online (Sandbox Code Playgroud)
正如评论中所建议的那样,您可以使用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')]
Run Code Online (Sandbox Code Playgroud)
这也可以概括为允许使用例如不同的分隔符groupby(a, key='|-'.__contains__).
关于注释:它的时间复杂度应该是O(n),就像使用时一样index,如果你不知道在哪里拆分并且没有以任何方式排序元组,那么这也是你能想到的最好的.但请注意,这会groupby产生一些开销,使得此解决方案比使用元组切片慢 4-5倍.不过,它仍然更加通用,更容易适用于未知数量的群体.index
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |