如何在python中按AaB而不是ABa排序字符串

时间:2018-12-18 21:46:14

标签: python string list sorting

我正在尝试对字符串进行排序(为punnetsquare创建基因型)。 我当前的实现是:

unsorted_genotype = 'ABaB'
sorted_genotype = sorted(list(unsorted_genotype))
sorted_string = ''.join(sorted_genotype)

它输出

'ABBa'

但是,我希望并期望:

'AaBB'

如何更改或修复此问题?

2 个答案:

答案 0 :(得分:5)

您可以指定sorting key并使用元组排序:

[(1,1),(1,2)]:元组按第1个元素排序,等式按第2个至第n个排序:

unsorted = 'ABaB'
s = sorted(unsorted, key= lambda x:(x.lower(),x))  
print(''.join(s))  # 'AaBB'

这可确保首先按照“下位”字符对它们进行排序-将aA分组在一起,然后再按实际字符进行排序,因此它们也将按以下顺序进行排序:ABaaAAaAaAAAB => AAAAAAAaaaaBB

阅读:

如所指控的骗子中所建议的,简单的key = str.lower不会将A分组到A,而将a分组到a,对于{ {3}}


如果让他们宁愿按出现顺序停留,然后将小写和大写字母组合在一起,则可以使用:

unsorted = 'ABaaAAaAaAAAB'
s = sorted(unsorted, key=str.lower)  # not by tuple, just by lower
print(''.join(s))  

使元素保持“有序”:

AaaAAaAaAAABB   # instead of  AAAAAAAaaaaBB

,并在Prunnet squares

中进行了描述

答案 1 :(得分:2)

您可以将键传递给排序功能:

unsorted_genotype = 'ABaB'
sorted_genotype = sorted(unsorted_genotype, key=lambda x: x.lower())
''.join(sorted_genotype)

'AaBB'