如何对表示元组的字符串列表进行排序?

时间:2017-03-07 15:38:36

标签: python string list sorting tuples

我有一个表示元组的字符串列表,如下所示:

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

有没有办法通过访问每个q后的数字对它进行排序,以便列表如下所示:

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

如果这些是整数会很容易,但我需要保持现在的字符串格式......

3 个答案:

答案 0 :(得分: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)']

答案 1 :(得分: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)']

答案 2 :(得分:0)

lt = ['(q2,0)', '(q3,0)', '(q0,0)', '(q1,0)', '(q4,0)']
lt.sort(key=lambda st : int(st[2]) )
print(lt)
  

<强>结果

[&#39;(q0,0)&#39;,&#39;(q1,0)&#39;,&#39;(q2,0)&#39;,&#39; (q3,0)&#39;,&#39;(q4,0)&#39;]

#st = '(q2,0)'
#st[2] = '2'
#int(st[2]) = 2