假设我有一个列表
lst1 = [[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2)]]
和另一个清单
lst2 = [['a', (1, 1)], ['a', (1, 2)], ['a', (1, 3)], ['b', (2, 1)], ['b', (2, 2)]]
现在我怎样才能确保在lst1中每个序列都应该是原样,这意味着在(2,2)之前没有(1,2)或之前(2,3)
如何确保在lst2中保留此顺序,这意味着['a',(1,2)]不应该出现在['a',(1,1)]或['b'之前,( 2,2)]不应该在['b',(2,1)]
之前出现答案 0 :(得分:1)
lst1[0].sort(key=lambda tpl: tpl[0]*10 + tpl[1])
应该做到这一点。
您可以为lst2
熟练掌握此内容:lst2.sort(key=lambda lst: lst[1][0]*10 + lst[1][1])
修改强>
您想要达到的顺序显然是自然顺序。因此,lst1[0].sort()
和lst2.sort()
会按照您的问题中的说明对列表进行排序。
答案 1 :(得分:0)
您可以实现自己的“compare
”功能并使用它。
例如,使用lst2
lst2 = [['a', (1, 1)], ['a', (1, 2)], ['a', (1, 3)], ['b', (2, 1)], ['b', (2, 2)]]
def compareLst2(item1, item2):
retval = 0
retval = ord(item1[0]) - ord(item2[0])
if retval == 0:
for i in range(2):
retval=item1[1][i] - item2[1][i]
if retval != 0:
return retval
return retval
print sorted(lst2 , cmp=compareLst2)
将角色的ascii代码放在第一个位置。 ('a' < 'b'
)。如果它们相等,则检查元组中的第一个数字(第二个位置),如果它们相等,则检查元组中的第二个数字......('元组'是{{ 1}})
这有点......嗯...愚蠢的方法,因为你不需要让itemWhatever[1]
对字符进行排序,但是你明白了,对吗?