2017-03-07 9 views
3

ので、同様に、私は、タプルを表す文字列のリストを持っている:タプルを表す文字列のリストをソートするにはどうすればよいですか?

[ '(q0,0)', '(q1,0)', '(q2,0)', '(q3,0)', '(q4,0)'] 

['(q2,0)', '(q3,0)', '(q0,0)', '(q1,0)', '(q4,0)'] 

リストは次のように見えるように、各qの後の数字にアクセスして、それをソートする方法はあり

これらが整数であれば、しかし、私はあなたが定義するキーに基づいて並べ替えることができます

+1

詐欺ではありません。タイトルにかかわらず、これはタプルのリストではなく、タプルフライする必要のある文字列のリストです。あなたがPythonでタプルリストに文字列リストを分割する方法を尋ねるならば、@ nanachanと言って、それからdupeリンクをチェックアウトすれば、ソートされるはずです。 – mcalex

答えて

4

...彼らは今あるとして、文字列の書式を維持する必要が簡単だろう:

def my_key(value): 
    return int(value.strip('()').split(',')[0][1:]) 

使用法:

>>> values = ['(q2,0)', '(q3,0)', '(q0,0)', '(q1,0)', '(q4,0)'] 
>>> values.sort(key=my_key) 
['(q0,0)', '(q1,0)', '(q2,0)', '(q3,0)', '(q4,0)'] 
+2

'[1:]'は複数の数字の場合に意味がありますか? –

+1

はい、間違いなく – GPhilo

+0

ありがとう、これは本当に役に立ちます。 – nanachan

0

あなたはpartitionを使用して "" 最初の文字列を分割することができ、その後strip "(qは"

lst = ['(q12,0)', '(q3,0)', '(q0,0)', '(q1,0)', '(q4,0)']  
sorted(lst, key=lambda item: int(item.partition(',')[0].strip('(q'))) 
# '(q0,0)', '(q1,0)', '(q3,0)', '(q4,0)', '(q12,0)'] 
0
"キー" 機能を供給することにより、使用してソートをカスタマイズ
lt = ['(q2,0)', '(q3,0)', '(q0,0)', '(q1,0)', '(q4,0)'] 
lt.sort(key=lambda st : int(st[2])) 
print(lt) 

結果

[ '(Q0,0)'、 '(Q1,0)'、 '(q2,0)'、 '(q3,0)'、 '(q4,0)']

#st = '(q2,0)' 
#st[2] = '2' 
#int(st[2]) = 2 
関連する問題