擅长:python、mysql、java
<p>你好像把两个问题混在一起了。第一种是对嵌套列表进行排序,第二种是如何根据这些<code>RZ</code>内容进行排序。你知道吗</p>
<p>您可以通过首先转置多维数组来执行前者,这样属于一起的项实际上在同一个子列表中。然后就可以根据第三个列表项上的排序函数进行排序。你知道吗</p>
<pre><code>>>> list(zip(*sorted(zip(*lst), key=lambda x: x[2])))
[('3', '1', '2', '4'), ('some text 3', 'some text 1', 'some text 2', 'some text 4'), ('some RZ-text to analyze', 'some text', 'some text to analyze with RZstring', 'some text to analyze with no rz-string and no textRZ')]
</code></pre>
<p>不过,对于第二个问题,我不太明白这种排序是基于什么。如果它是<code>RZ</code>之前的前缀,那么后两项仍然会被颠倒,还是不会?你知道吗</p>
<hr/>
<p>根据注释中更新的规范,您可以使用正则表达式检查<code>RZ</code>是否出现在前面(<code>\b</code>)的单词边界处,并在排序键的from中添加该事实:</p>
<pre><code>>>> import re
>>> list(zip(*sorted(zip(*lst), key=lambda x: (re.search(r'\bRZ', x[2]) != None, x[2]))))
[('1', '4', '3', '2'), ('some text 1', 'some text 4', 'some text 3', 'some text 2'), ('some text', 'some text to analyze with no rz-string and no textRZ', 'some RZ-text to analyze', 'some text to analyze with RZstring')]
</code></pre>