在列表中加入特定元组

nut*_*hip 3 python list-comprehension python-2.7

我最近一直在问这个问题,并且感觉不太需要这么多的帮助,但这个算法看起来很难.

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

[('12 Mar 2011',), ('152', 'Farko', 'Kier'), ('153', 'Park', 'Pub'), ('09 Mar 2011',), ('158', 'Diving', 'Jogging')]
Run Code Online (Sandbox Code Playgroud)

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

 [('152', 'Farko', 'Kier', '12 Mar 2011'), ('153', 'Park', 'Pub', '12 Mar 2011'), ('158', 'Diving', 'Jogging', '09 Mar 2011',]
Run Code Online (Sandbox Code Playgroud)

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

eca*_*mur 8

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

def join_dates(l):
    date = None
    for t in l:
        if len(t) == 1:
            date = t
        else:
            yield t + date
Run Code Online (Sandbox Code Playgroud)

为了完整起见,这是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]
Run Code Online (Sandbox Code Playgroud)