有没有一种简单的方法可以在python中按数字然后按氨基酸字母排序



有没有一种简单的方法可以按字母数字排序,但以数字增量,然后在下一个数字处再次开始字母是的,后面跟着国会大厦的字母,没有空格,最多 5 位数字蟒蛇,氨基酸序列号?

在Python中,我尝试过:

from natsort import natsort_keygen, ns
l1 = ['D1', 'E1', 'S1', 'S4', 'S6', 'C1', 'S2', 'D2', 'C2', 'E2', 'W373']
natsort_key1 = natsort_keygen(key=lambda y: y.lower())
l1.sort(key=natsort_key1)
l1
# Gives: 
['C1', 'C2', 'D1', 'D2', 'E1', 'E2', 'S1', 'S2', 'S4', 'S6', 'W373']

但是我喜欢它:

['C1', 'D1', 'E1', 'S1', 'C2','D2', 'E2', 'S2', 'S4', 'S6', 'W373']

您可以使用以下排序:

amino_acids = ['D1', 'E1', 'S1', 'S4', 'S6', 'C1', 'S2', 'D2', 'C2', 'E2', 'W373']
sorted_acids = sorted(
    amino_acids,
    key=lambda acid: (int(acid[1:]), acid[0])
)

应该没问题,因为氨基酸只有一个字母。

你可以使用python的sorted()函数

sorted(sorted(l1), key = lambda value:value[:1], value[0])

输出: ['C1', 'D1', 'E1', 'S1', 'C2', 'D2', 'E2', 'S2', 'S4', 'S6', 'W373']

如果我的理解是正确的,氨基酸由一个字母表和一个数字表示,那么以下内容应该可以解决问题。

from natsort import natsort_keygen, ns
l1 = ['D1', 'E1', 'S1', 'S4', 'S6', 'C1', 'S2', 'D2', 'C2', 'E2', 'W373']
for k, v in enumerate(l1):
    l1[k] = v[1:] + v[0]
natsort_key1 = natsort_keygen(key=lambda y: y.lower())
l1.sort(key=natsort_key1)
for k, v in enumerate(l1):
    l1[k] = v[-1] + v[:-1]
l1
这会对第一个字符进行排序,将

第一个字符带到字符串的末尾,对其进行排序,然后将其带回,应该可以解决问题。

同样,我对氨基酸了解不多,第一个谷歌搜索结果表明只有一个字符后跟数字。我的回答是基于这个假设

最新更新