<pre><code>max(int(subl[0].rsplit('-',1)[1]) for subl in L)
</code></pre>
<p>这将返回<code>3</code>。如果要打印<code>'003'</code>,则可以执行以下操作:</p>
<pre><code>print "%03d" %max(int(subl[0].rsplit('-',1)[1]) for subl in L)
</code></pre>
<p>解释:</p>
<p>您似乎已经知道,<code>max</code>获取一个数字列表并返回最大的一个。这几乎是正确的:<code>max</code>接受任何<strong>可交互的</strong>并返回最大的元素。生成器是一个iterable,占用O(1)个空间,而list则占用O(n)个空间。<br/>
您还可以使用列表理解来创建生成器(称为生成器理解),这就是我所做的。你知道吗</p>
<pre><code>(int(subl[0].rsplit('-',1)[1]) for subl in L)
</code></pre>
<p>同:</p>
<pre><code>def myGen():
for subl in L:
elem = subl[0]
myNum = elem.rsplit('-', 1)
myNum = int(myNum)
yield myNum
max(myGen)
</code></pre>
<p><code>subl</code>迭代迭代<code>L</code>的子列表。<code>subl[0]</code>获取每个子列表的第0个元素。然后我们调用<code>rsplit('-' ,1)</code>,它在字符串末尾出现第一个<code>-</code>时将字符串拆分为两部分;拆分显示在一个列表中。这个列表的第0个索引是<code>-</code>左边的索引,第1个索引是右边的索引。因为数字在右边,所以我们取<code>subl[0].rsplit('-',1)[1]</code>。<br/>
此时,我们只有字符串<code>'003'</code>,为了<code>max</code>的目的,我们想把它转换成<code>int</code>。所以我们称之为<code>int(subl[0].rsplit('-',1)[1])</code>。这就是它如何生成所有所需的数字,然后<code>max</code>从中取出最大的一个</p>