在Python中按长度和值对列表进行排序

时间:2018-03-21 05:09:30

标签: python python-2.7 list

如何对Python列表进行排序(使用子列表)?例如,我有以下列表:

list1 = [[0, 4, 1, 5], [3, 1, 5], [4, 0, 1, 5]]

排序后我期待:

list1 = [[3, 1, 5], [0, 4, 1, 5], [4, 0, 1, 5]]

另一个例子。我有以下列表:

list2 = [[4, 5, 2], [2, 5, 4], [2, 4, 5]]

排序后我期待:

list2 = [[2, 4, 5], [2, 5, 4], [4, 5, 2]]

首先,我想按长度排序,然后按每个子列表中的逐项排序。 我不想对任何子列表进行排序。

我尝试了以下代码,这有助于我按长度排序:

list1.sort(key=len)

2 个答案:

答案 0 :(得分:35)

你需要一把钥匙,如:

<html> 
<script>
function brnch()
{
var client_code = document.getElementById("cname").value;
xmlobj=ajaxFunction();
xmlobj.onreadystatechange=function(){
if(xmlobj.readyState == 4)
{
var resp = xmlobj.responseText;
document.getElementById("brch").value=resp;
}
}
var url="getbranch.jsp?c_code="+client_code;
xmlobj.open("POST",url,true);
xmlobj.send();
}
</script>
<input type="hidden" name="brancht" id="brch" value="">
<%
String value=request.getParameter("brch");
System.out.println("hidden field :"+value);
%>
</html>

如何:

这使用lambda创建tuplesorted可以使用{{3}}以所需方式排序。这是有效的,因为元组按元素排序。

测试代码:

lambda l: (len(l), l)

结果:

list1 = [[0, 4, 1, 5], [3, 1, 5], [4, 0, 1, 5]]
print(sorted(list1, key=lambda l: (len(l), l)))

list2 = [[4, 5, 2], [2, 5, 4], [2, 4, 5]]
print(sorted(list2, key=lambda l: (len(l), l)))

答案 1 :(得分:1)

Python的list.sort()方法是“稳定的”,i。即比较相等的项目的相对顺序不会改变。因此,您也可以通过调用sort()两次来实现所需的顺序:

>>> list1 = [[3, 1, 5], [0, 4, 1, 5], [4, 0, 1, 5]]
>>> list1.sort()  # sort by sublist contents
>>> list1.sort(key=len)  # sort by sublist length
>>> list1
[[3, 1, 5], [0, 4, 1, 5], [4, 0, 1, 5]]