python - 如何在 python 中按顺序 AaB 而不是 ABa 对字符串进行排序

标签 python string list sorting

我正在尝试对字符串进行排序(为 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'

这确保它首先按“低”字符排序 - 将 aA 分组在一起,然后按实际字符排序,因此它们也发生排序:ABaaAAaAaAAAB => AAAAAAAaaaaBB

阅读 Material :

一个简单的 key = str.lower 如所指控的骗局所建议的那样,不会将 A 分组到 Aaa 这对于 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/

相关文章:

python - 如何修复 ValueError : read of closed file exception?

javascript - c# 如何从网站复制文本(不是源代码)

mysql - 如何使用 MySQL Workbench 查找字符串中多次出现的子字符串?

c - 在 C 中实现和使用动态数组

python - 用python字符串的ascii序数列表

python - 未解析的外部符号 main(无下划线)

python - 查找通信网络流量频率的算法

python - PYQT如何编辑在MainWindow中tab化的QDockWidget的标题?

c - 结构的字符串元素不保留分配的值

r - 在第一个数据帧中创建一个新列,其中包含另一个数据帧中行的转置值和重复值