我正在尝试对字符串进行排序(为 punnetsquare 制作基因型)。 我当前的实现是:
unsorted_genotype = 'ABaB'
sorted_genotype = sorted(list(unsorted_genotype))
sorted_string = ''.join(sorted_genotype)
输出
'ABBa'
不过,我希望并期望:
'AaBB'
我该如何更改或解决这个问题?
最佳答案
您可以指定 sorting key并使用元组排序:
[(1,1),(1,2)]
:元组按第一个元素排序,相等时按第二个到第 n 个元素排序:
unsorted = 'ABaB'
s = sorted(unsorted, key= lambda x:(x.lower(),x))
print(''.join(s)) # 'AaBB'
这确保它首先按“低”字符排序 - 将 a
和 A
分组在一起,然后按实际字符排序,因此它们也发生排序:ABaaAAaAaAAAB => AAAAAAAaaaaBB
阅读 Material :
一个简单的 key = str.lower
如所指控的骗局所建议的那样,不会将 A
分组到 A
和 a
到 a
这对于 Prunnet squares 会很好
如果您想让它们按出现顺序排列,然后将小写字母和大写字母组合在一起,您可以使用:
unsorted = 'ABaaAAaAaAAAB'
s = sorted(unsorted, key=str.lower) # not by tuple, just by lower
print(''.join(s))
保持元素“有序”的结果:
AaaAAaAaAAABB # instead of AAAAAAAaaaaBB
并在 case-insensitive list sorting, without lowercasing the result? 中进行了描述
关于python - 如何在 python 中按顺序 AaB 而不是 ABa 对字符串进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53841562/