按第一个元素的长度排序列表复合体

你好。我需要对像z=[['111','C'],['234','A'],['12','Z'],['89','V'],['1110009','E'],['5','T']这样的列表进行排序,首先是第一个元素的长度,然后是他的顺序。
使用z.ort()给出[['111','C'],['1110009','E'],['12','Z'],['234','A'],['5','T'],['89','V']]。我想把'len'这个功能组合起来,但我不知道怎么做。
我试图找到解决方案,但我真的不明白如何使用'key'或lambda,即使它可以帮助我,或者我是否需要做一个其他函数……
如果有人能帮我..。谢谢

# 回答1


下面是使用lambda对列表中第一个元素的长度进行排序的示例。

选择 | 换行 | 行号
  1. >>> z=[['111','C'],['234','A'],['12','Z'],['89','V'],['1110009','E'],['5','T']]
  2. >>> sorted(z)
  3. [['111', 'C'], ['1110009', 'E'], ['12', 'Z'], ['234', 'A'], ['5', 'T'], ['89', 'V']]
  4. >>> z.sort(lambda a,b: cmp(len(a[0]), len(b[0])))
  5. >>> z
  6. [['5', 'T'], ['12', 'Z'], ['89', 'V'], ['111', 'C'], ['234', 'A'], ['1110009', 'E']]
  7. >>> z.sort(lambda a,b: cmp(len(a[0]), len(b[0])), reverse=True)
  8. >>> z
  9. [['1110009', 'E'], ['111', 'C'], ['234', 'A'], ['12', 'Z'], ['89', 'V'], ['5', 'T']]
  10. >>> 
# 回答2


如果你仍然不明白它是如何做到的,网上有很多排序教程,所以你可以写你自己的排序
1.依次提取每个长度,即提取第一个项长度为1的所有子列表,将其排序并追加到输出列表中。对长度为2的元素执行相同的操作,然后继续,直到原始列表中没有更多的元素。
2.预先附加长度,以便首先对其进行排序,然后按照以下代码中的顺序对列表的其余部分进行排序

选择 | 换行 | 行号
  1. z=[['234','A'],['111','C'],['12','Z'],['12','V'],
  2.    ['1110009','E'],['5','T'],['20','B']]
  3. z2 = [[len(x[0])] + x for x in z]
  4.  
  5. print z2, "\n"
  6. z2.sort()
  7. print z2 

标签: python

添加新评论