<pre><code>>>> n = 3
>>> list1 = [1,2,3,4,5,6,7,8,9]
>>> [avg for avg in [sum(list1[i:i+n])//n for i in range(0,len(list1),n)] for j in range(n)]
[2, 2, 2, 5, 5, 5, 8, 8, 8]
</code></pre>
<p>不需要工具:-)</p>
<p>说明:下面将作业分成两个步骤;这有帮助吗?哪一部分还不清楚?</p>
<pre><code>>>> n = 3
>>> list1 = [1,2,3,4,5,6,7,8,9]
>>> averages = [sum(list1[i:i+n])//n for i in range(0,len(list1),n)]
>>> print("averages: ", averages)
averages: [2, 5, 8]
>>> list2 = [avg for avg in averages for j in range(n)]
>>> print("list2: ", list2)
list2: [2, 2, 2, 5, 5, 5, 8, 8, 8]
</code></pre>
<p><strong>更新:另一种不使用itertools的方法一行:</strong></p>
<pre><code>>>> list2 = sum(([a]*n for a in [sum(list1[i:i+n])//n for i in range(0,len(list1),n)]), [])
[2, 2, 2, 5, 5, 5, 8, 8, 8]
</code></pre>
<p>说明:我们像以前一样计算平均数。然后我们把它们像这样散开:</p>
<pre><code>>>> averages = [2, 5, 8]
>>> list2 = sum(([a]*n for a in averages), []) ### see note [1] below
>>> list2
[2, 2, 2, 5, 5, 5, 8, 8, 8]
</code></pre>
<p>它可以像这样进一步展开:</p>
<pre><code>>>> all_items = list([a]*n for a in averages)
>>> all_items
[[2, 2, 2], [5, 5, 5], [8, 8, 8]]
>>> sum(all_items, [])
[2, 2, 2, 5, 5, 5, 8, 8, 8]
>>>
</code></pre>
<p>注[1]:第一个参数<code>sum</code>看起来包含在不必要的圆括号中。。。如果你这么认为,试着在没有他们的情况下运行它,看看会发生什么。</p>