加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 将列表拆分为不均匀的元组

发布时间:2020-12-16 23:25:03 所属栏目:Python 来源:网络整理
导读:我正在尝试将一个字符串列表拆分为包含这些字符串的不均匀长度的元组列表,每个元组包含最初用空字符串分隔的字符串.基本上我需要可以应用于列表的参数化拆分.如果我的初始列表如下: init = ['a','b','','c','d e','fgh','ij','k','l',''] 此列表的最后一个
我正在尝试将一个字符串列表拆分为包含这些字符串的不均匀长度的元组列表,每个元组包含最初用空字符串分隔的字符串.基本上我需要可以应用于列表的参数化拆分.如果我的初始列表如下:
init = ['a','b','','c','d e','fgh','ij','k','l','']

此列表的最后一个元素始终是结束”.可以连续的’s被认为是单身.
我需要的结果是:

end = [('a','b'),('c','fgh'),('ij',),('k','l')]

我已经有了丑陋的代码来完成工作,并且在列表完全弹出后会超出范围:

end = []
while init[-1] == u'':
 init.pop()
 l = []
 while init[-1] != u'':
  l.append(init.pop())
 end.append(tuple(l))

我想使用理解,但是尝试解压缩参数列表,反转自引用列表,使用双端队列和各种代码气味都没有成功,我现在怀疑是否有必要寻找(嵌套)理解解决方案?

解决方法

您可以使用itertools.groupby函数根据元素的大小对元素进行分组,如下所示
>>> from itertools import groupby
>>> init = ['a','']
>>> [tuple(g) for valid,g in groupby(init,key=lambda x: len(x) != 0) if valid]
[('a','l')]

这基本上根据元素的长度对元素进行分组.如果项目的长度不等于零,则它们将被放入一个组中,直到满足来自另一个组的元素.对于长度不等于零的元素组,键函数将返回True,否则返回False.我们忽略具有False的组(因此检查是否有效).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读