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

python – 在列表中加入特定元组

发布时间:2020-12-20 12:21:54 所属栏目:Python 来源:网络整理
导读:我最近一直在问这个问题,并且感觉不太需要这么多的帮助,但这个算法看起来很难. 我有一个像这样的元组列表: [('12 Mar 2011',),('152','Farko','Kier'),('153','Park','Pub'),('09 Mar 2011',('158','Diving','Jogging')] 具有日期的元组将始终具有len == 1.
我最近一直在问这个问题,并且感觉不太需要这么多的帮助,但这个算法看起来很难.

我有一个像这样的元组列表:

[('12 Mar 2011',),('152','Farko','Kier'),('153','Park','Pub'),('09 Mar 2011',('158','Diving','Jogging')]

具有日期的元组将始终具有len == 1.现在,我需要将所有以下非日期元组加入每个前一个日期.非日期元组的数量将始终未定义.日期元组将连接序列中的每个非日期元组,直到它接近下一个日期元组,然后该元组必须加入以下所有非日期元组,依此类推.最终结果应该是这样的:

[('152','Kier','12 Mar 2011'),'Pub','Jogging','09 Mar 2011',]

如果你不能提供一个现成的代码,也许有一些提示在哪里查看,有什么方法,因为我无法想到我的工具包中可以做得很好的任何事情.

解决方法

您可以使用itertools.groupby编写此函数,但命令式生成器函数可能更具可读性:

def join_dates(l):
    date = None
    for t in l:
        if len(t) == 1:
            date = t
        else:
            yield t + date

为了完整性,这里是itertools解决方案:

from itertools import groupby
[t + ds[0] for ds,ts in zip(*[(list(g) for _,g in groupby(l,len))] * 2) for t in ts]

(编辑:李大同)

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

    推荐文章
      热点阅读