回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>此处简化的<a href="https://codechalleng.es/bites/5/" rel="nofollow noreferrer">PyBites Code Challenges</a>之一涉及按姓氏对姓名列表进行排序:</p>
<pre><code>>>> names = ['Al Pacino', 'Matt Damon', 'Sandra Bullock', 'Keanu Reeves']
>>> sorted(names, key=lambda x: x.split()[1])
['Sandra Bullock', 'Matt Damon', 'Al Pacino', 'Keanu Reeves']
</code></pre>
<p>对于给定的示例,这种方法可以很好地工作,但是如果任何字符串拆分为少于两个部分,则会中断。例如,添加“麦当娜”:</p>
^{pr2}$
<p>也许可以用空字符串将拆分的字符串填充到所需的长度:</p>
<pre><code>def last_name(name, last_name_field=2):
name_split = name.split()
while len(name_split) < 2:
name_split.append('')
return name_split[last_name_field - 1]
</code></pre>
<p>因此:</p>
<pre><code>>>> names = ['Al Pacino', 'Madonna', 'Matt Damon', 'Sandra Bullock', 'Keanu Reeves']
>>> sorted(names, key=last_name)
['Madonna', 'Sandra Bullock', 'Matt Damon', 'Al Pacino', 'Keanu Reeves']
</code></pre>
<p>有更好的方法吗?在</p>
<p><strong>澄清</strong>:迄今为止的答案提供了对拆分字符串中最后一个元素进行排序的替代方法。这些都很有用——谢谢!在</p>
<p>但是,由于我的问题没有充分说明——我的错——我真正想要的是一种对拆分字符串的给定元素(或字段)进行排序的方法,如果任何拆分字符串的字段数少于所需的数量,则不会引发异常并失败。在</p>
<p>本质上,我在寻找一种方法来获得与Unix sort命令相同的结果,如下面的示例,它对字段2进行排序:</p>
<pre><code>$ sort +1 -2 Madonna.txt # sorts by field 2
Madonna # without a field 2, sorts before the others
Leonardo Da Vinci # sorts on Da (before Damon)
Matt Damon
Robert Downey Jr # sorts on Downey, not Jr
Scarlett Johansson
Al Pacino
</code></pre>
<p>我的“填充”分割字符串的想法(见上文)是基于空字符串在非空字符串之前排序的观察结果,例如:</p>
<pre><code>>>> sorted(['Al', 'Joe', 'Hachim', '', 'Greta'])
['', 'Al', 'Greta', 'Hachim', 'Joe']
</code></pre>
<p>那么,我的问题是,是否有更有效的方法来实现这个结果,是通过更有效地填充拆分字符串,还是采用完全不同的方法。在</p>