擅长:python、mysql、java
<p>我想我明白你的意思了!如果我错了,请纠正我。基本上取决于<code>B</code>,不是吗?B出现的次数越多或距离字符串的开头越近,它出现在最终答案列表中的距离就越远,不是吗?你知道吗</p>
<p>所以,我就是这么做的。你知道吗</p>
<ul>
<li>首先,我得到一个列表,其中字符串按照<code>B</code>的频率顺序排序。你知道吗</li>
<li>这是不够的,因为字符串的顺序在原始列表中很重要。要看到这个从我的答案中删除For循环并打印<code>lst</code>,您将清楚地看到这个问题。你知道吗</li>
<li><p>所以现在我需要<code>sort</code>(正常的字典排序)每一组具有相同频率<code>B</code>的字符串。我用<code>groupby</code>来做这个。请参阅<a href="https://docs.python.org/2/library/itertools.html#itertools.groupby" rel="nofollow noreferrer">groupby</a>的用法,并对每个这样的组进行排序,并将它们附加到最终答案中。你知道吗</p>
<pre><code>from itertools import groupby
lst = ['AAAAAABB', 'AAAAAABA', 'AAAAAAAB', 'AAAAABAA', 'AAAAABAB', 'AAAAABBA']
ans = []
lst.sort(key=lambda x:x.count('B'))
for i,j in groupby(lst, lambda x:x.count('B')):
ans.extend(sorted(list(j)))
print ans
</code></pre></li>
</ul>
<p>输出:</p>
<pre><code>['AAAAAAAB', 'AAAAAABA', 'AAAAABAA', 'AAAAAABB', 'AAAAABAB', 'AAAAABBA']
</code></pre>