擅长:python、mysql、java
<p>假设列表已经按第一个元素排序,可以使用<code>itertools.groupby</code>对元素进行分组,然后组合新的子列表。在</p>
<pre><code>manipulate = []
for group in (list(g) for k, g in itertools.groupby(mylist, key=lambda x: x[0])):
lst = [group[0][0]] + [x for g in group for x in g[1:3]] + [group[0][3]] + [sum(g[-1] for g in group)]
manipulate.append(lst)
</code></pre>
<p>如果你想的话,你甚至可以把这些列在一个可怕的清单里。。。在</p>
^{pr2}$
<p>结果是这样的(我不合并字符串,因为我不确定您的真正意思是这样):</p>
<pre><code>[[16, 'August', 2014, 'Iunie', 2014, 540, 30],
[23, 'August', 2014, 'Septembrie', 2016, 540, 40],
[21, 'August', 2014, 422, 30]]
</code></pre>
<p>如果要合并日期,请使用以下稍微更糟糕的列表理解:</p>
<pre><code>manipulate = [[group[0][0]] + [', '.join(' '.join(map(str, g[1:3])) for g in group)] + [group[0][3]] + [sum(g[-1] for g in group)]
for group in (list(g) for k, g in itertools.groupby(mylist, key=lambda x: x[0]))]
</code></pre>
<p>这样,结果是:</p>
<pre><code>[[16, 'August 2014, Iunie 2014', 540, 30],
[23, 'August 2014, Septembrie 2016', 540, 40],
[21, 'August 2014', 422, 30]]
</code></pre>
<p>这适用于每个组中任意数量的元素。如果子列表不是按第一个元素排序的,请先对它们排序,或者使用字典进行分组。在</p>