我正在尝试对字符串进行排序(为punnetsquare创建基因型)。 我当前的实现是:
unsorted_genotype = 'ABaB'
sorted_genotype = sorted(list(unsorted_genotype))
sorted_string = ''.join(sorted_genotype)
它输出
'ABBa'
但是,我希望并期望:
'AaBB'
如何更改或修复此问题?
答案 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'
这可确保首先按照“下位”字符对它们进行排序-将a
和A
分组在一起,然后再按实际字符进行排序,因此它们也将按以下顺序进行排序: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
中进行了描述
答案 1 :(得分:2)
您可以将键传递给排序功能:
unsorted_genotype = 'ABaB'
sorted_genotype = sorted(unsorted_genotype, key=lambda x: x.lower())
''.join(sorted_genotype)
'AaBB'