<pre><code>import pprint
LL= [ ('A123', 'A120', '2011-03'),
('A133', 'A123', '2011-03'),
('D123', 'D120', '2011-04'),
('D140', 'D123', '2011-04'),]
LL = [row+(i,) for i,row in enumerate(LL,1)]
pprint.pprint(LL)
</code></pre>
<p>收益率</p>
^{pr2}$
<hr/>
<p>以下是一些解释:</p>
<p>我们从如下定义的<code>LL</code>开始:</p>
<pre><code>In [28]: LL
Out[28]:
[('A123', 'A120', '2011-03'),
('A133', 'A123', '2011-03'),
('D123', 'D120', '2011-04'),
('D140', 'D123', '2011-04')]
</code></pre>
<p>第一个技巧是使用<a href="http://docs.python.org/library/functions.html#enumerate" rel="nofollow">enumerate</a>:</p>
<pre><code>In [30]: list(enumerate(LL))
Out[30]:
[(0, ('A123', 'A120', '2011-03')),
(1, ('A133', 'A123', '2011-03')),
(2, ('D123', 'D120', '2011-04')),
(3, ('D140', 'D123', '2011-04'))]
</code></pre>
<p>这与您想要的很接近,只是“rank”从0开始计数,并被放在行的前面而不是末尾。我们可以告诉<code>enumerate</code>从1开始计数,使用<code>enumerate(LL,1)</code>,我们可以使用<a href="http://docs.python.org/tutorial/datastructures.html#list-comprehensions" rel="nofollow">list comprehension</a>将排名放在行的末尾:</p>
<pre><code>In [31]: [row+(i,) for i,row in enumerate(LL,1)]
Out[31]:
[('A123', 'A120', '2011-03', 1),
('A133', 'A123', '2011-03', 2),
('D123', 'D120', '2011-04', 3),
('D140', 'D123', '2011-04', 4)]
</code></pre>
<p>在列表理解中,<code>row</code>是一个类似<code>('A123', 'A120', '2011-03')</code>的元组,
并且<code>row+(i,)</code>是元组的和:</p>
<pre><code>In [32]: ('A123', 'A120', '2011-03')+(1,)
Out[32]: ('A123', 'A120', '2011-03', 1)
</code></pre>
<p>这就是如何构造列表理解的每一行。在</p>