假设我有一个这样的字符串列表
L = ['5', '3', '4', '1', '2', '2 3 5', '2 4 8', '5 22 1 37', '5 22 1 22', '5 22 1 23', ....]
我如何对列表进行排序,这样我就可以得到这样的东西:
L = ['1', '2', '3','4', '5', '2 3 5', '2 4 8', '5 22 1 22', ' 5 22 1 23', '5 22 1 37', ...]
基本上,我需要根据2个字符串之间的第一个不同数字对列表进行排序
答案 0 :(得分:5)
您可以使用元组进行排序:
L = ['5', '3', '4', '1', '2', '2 3 5', '2 4 8', '5 22 1 37', '5 22 1 22', '5 22 1 23']
result = sorted(L, key=lambda x: (len(x.split()),) + tuple(map(int, x.split())))
print(result)
输出
['1', '2', '3', '4', '5', '2 3 5', '2 4 8', '5 22 1 22', '5 22 1 23', '5 22 1 37']
这个想法是使用一个元组作为键,其中第一个元素是字符串中数字的数量,其余元素是数字的元组。例如,对于'2 3 5'
,密钥为(3, 2, 3, 5)
如@ PM2Ring所建议,您可以使用def
函数代替lambda
:
def key(x):
numbers = tuple(map(int, x.split()))
return (len(numbers),) + numbers
答案 1 :(得分:1)
与@Daniel的方法略有不同。
*Global Styles*/
*, *::before, *::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
overflow: hidden;
}
/*Header Section*/
header {
position: relative;
width: auto;
max-width: 900px
background-color: black;
height: auto;
}
nav ul {
width: 100%;
height: 63px;
background-color: black;
list-style: none;
text-align: center;
}
nav ul li {
float: left;
padding: 0;
width: 200px;
}
nav ul li a {
width: 100%;
padding: 21.5px 0px;
color: white;
font-size: 20px;
text-decoration: none;
font-family: Verdana, sans-serif;
text-transform: uppercase;
transition: all .25s ease;
}
nav ul li a:hover:not(.active) {
background-color: rgb(35, 35, 35);
}
nav .active {
background-color: rgb(63, 63, 63);
}
nav .table {
display: table;
margin: 0 auto;
}
nav .color {
background-color: black;
}
nav li a, nav li {
display: inline-block;
}
.banner {
width: 100%;
}
输出
idx = sorted(range(len(L)), key=lambda i: int(''.join(L[i].split())))
L = [L[i] for i in idx]