2017-03-07 110 views
3

我有代表的元組,像這樣的字符串列表:如何排序表示元組的字符串列表?

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

有什麼辦法由每個Q後訪問數進行排序,所以該列表看起來像這樣:

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

這將是容易,如果這些都是整數,但我需要保持字符串格式像現在這樣......

+1

不是一個笨蛋。無論標題如何,這不是一個元組列表,它是一個需要元組化的字符串列表。話雖如此,@nanachan如果你問如何將一個字符串列表拆分成一個python中的元組列表,然後查看這個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