在python中,有没有一种简单的方法可以先按数字排序,然后再按氨基酸字母排序
有没有一种简单的方法可以按字母数字进行排序,但以数字递增,然后在下一个数字处重新开始字母 是,后面是国会大厦字母,不带空格,最多5位数字 python,氨基酸序列号 在Python中,我尝试过:在python中,有没有一种简单的方法可以先按数字排序,然后再按氨基酸字母排序,python,sorting,alphanumeric,Python,Sorting,Alphanumeric,有没有一种简单的方法可以按字母数字进行排序,但以数字递增,然后在下一个数字处重新开始字母 是,后面是国会大厦字母,不带空格,最多5位数字 python,氨基酸序列号 在Python中,我尝试过: from natsort import natsort_keygen, ns l1 = ['D1', 'E1', 'S1', 'S4', 'S6', 'C1', 'S2', 'D2', 'C2', 'E2', 'W373'] natsort_key1 = natsort_keygen(key=lambd
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])
)
应该可以,因为只有一个字母。您可以使用这种排序:
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(已排序(l1),key=lambda值:值[:1],值[0])
输出:
['C1',D1',E1',S1',C2',D2',E2',S2',S4',S6',W373']
您可以使用python的函数
sorted(已排序(l1),key=lambda值:值[:1],值[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
这种排序方法将第一个字符带到字符串的末尾,对其进行排序,然后将其带回来,这样就可以了
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
再说一次,我对氨基酸了解不多,谷歌的第一个搜索结果显示只有一个字符后跟数字。我的答案基于这个假设如果我的理解是正确的,氨基酸是由一个字母后跟一个数字来表示的,那么下面的方法就可以了
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
这种排序方法将第一个字符带到字符串的末尾,对其进行排序,然后将其带回来,这样就可以了
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
再说一次,我对氨基酸了解不多,谷歌的第一个搜索结果显示只有一个字符后跟数字。我的回答基于这样的假设氨基酸能有两个字母吗?@Giantslovedatehmetal请不要讽刺自己,不要让自己回答自己的问题。@8质子在这种情况下,不删除他的评论并自己回答是合法的。我不知道只有一封信,原始问题中缺少信息,其他人可能也不知道,这对问题有点关键。@bgse好的观点,也许我推断他的两个评论是错误的,考虑到两个评论之间有7分钟的间隔,我想你是对的。我为一个可能的错误假设向GiantSlovedAthmetal道歉。但是——我仍然认为第一条评论是不必要的,简单地说“氨基酸不能有两个字母”就足够了。无论如何,这个评论是无关紧要的。C1、C2、E1、E2等是关于氨基酸-蛋白质结合区、末端、,还有更多。我同意你们两人的看法。氨基酸能有两个字母吗?@GiantSlovedAthmetal请不要讽刺,不要让自己回答自己的问题。@8质子在这种情况下,不删除他的评论并自己回答是合法的。我不知道只有一封信,原始问题中缺少信息,其他人可能也不知道,这对问题有点关键。@bgse好的观点,也许我推断他的两个评论是错误的,考虑到两个评论之间有7分钟的间隔,我想你是对的。我为一个可能的错误假设向GiantSlovedAthmetal道歉。但是——我仍然认为第一条评论是不必要的,简单地说“氨基酸不能有两个字母”就足够了。无论如何,这个评论是无关紧要的。C1、C2、E1、E2等是关于氨基酸-蛋白质结合区、末端等的合法名称。我同意你们两人的意见。@GiantSlovedAthmetal是的,做了更正,谢谢指出。@GiantSlovedAthmetal是的,做了更正,谢谢指出。变量名在第4行有一个拼写错误,它应该是
氨基酸
第4行的变量名有一个拼写错误,应该是氨基酸
是的,它们(氨基酸)每个1个字母后跟多达5个数字,没有空格。这些答案很好,似乎效果很好。谢谢大家。是的,它们(氨基酸)都是1个字母,后跟多达5位数字,没有空格。这些答案很好,似乎效果很好。谢谢大家。