2017-11-07 18 views
0

アルファベット順で並べ替える簡単な方法はありますか?数字で並べ替えることは簡単です。 はいキャピトル文字はスペースなし最大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=lambda y: y.lower()) 
l1.sort(key=natsort_key1) 
l1 

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

しかし、それのようなID:

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

アミノ酸には2つの文字がありますか? – GiantsLoveDeathMetal

+1

@GiantsLoveDeathMetalあなた自身の質問に答えるために、皮肉を避けて自分自身を設定してください。 – 8protons

+1

@ 8protonsこの場合、彼のコメントを削除して自分自身に答えることは正当です。私はただ1つの手紙があったことを知らなかった、元の質問に情報が欠けていた、他の人もそれを知らないかもしれない、そしてそれは問題のためにちょっと重要である。 – bgse

答えて

1

をあなたがこの種を使用することができます。

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であるべき一つの手紙を持っています。あなたがPythonのsorted()機能を使用することができます

+1

4行目に変数名のタイプミスがあります。それは 'amino_acid'でなければなりません – Sheshnath

+0

@Sheshnath thanksありがとう – GiantsLoveDeathMetal

1

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

出力:私の理解は、次が何をすべきアミノ酸は数字が続く単一のアルファベットで表されていることを正しい場合 ['C1', 'D1', 'E1', 'S1', 'C2', 'D2', 'E2', 'S2', 'S4', 'S6', 'W373']

+0

@GiantsLoveDeathMetalうん、修正をしました。 – Sheshnath

0

トリック。

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 

これは、ソート、文字列の最後に最初の文字を取り、それをソートし、次にそれを戻すと、トリックを行う必要があります。

アミノ酸についてはあまりよく分かりませんが、最初のGoogle検索結果では、1つの文字に続けて数字が続くことが示唆されています。そして私の答えはその前提に基づいています

+0

はい彼ら(アミノ酸)はそれぞれ1文字で、それに5桁もあり、スペースはありません。これらの答えは素晴らしいです。皆さん、ありがとうございました。 – tonyb70

関連する問題