数据量是不固定的,可以是10-01,也可以是08-07-12-41-54-12
在python中有个库natsort,用自然顺序算法对给定数组中的元素排序。 natsort() 函数实现了“自然排序”,即数字从 1 到 9 的排序方法,字母从 a 到 z 的排序方法,短者优先。你的需求,可以用natsort来实现,代码如下:
import natsort
a = ['10-4', '12-18-7', '12-18-2', '12-18-3', '12-18-4', '12-18-5', '6-4-1', '12-3-10', '10-6-7-4-3', '10-6-7-4-2', '12-3-12', '10-6-7-4-1', '12-3-11', '7-78-1-7', '7-78-1-6', '12-71-4', '12-71-3', '12-71-2', '12-3-14', '7-78-1-3', '12-3-13']
print(natsort.humansorted(a))
#运行结果:
['6-4-1', '7-78-1-3', '7-78-1-6', '7-78-1-7', '10-4', '10-6-7-4-1', '10-6-7-4-2', '10-6-7-4-3', '12-3-10', '12-3-11', '12-3-12', '12-3-13', '12-3-14', '12-18-2', '12-18-3', '12-18-4', '12-18-5', '12-18-7', '12-71-2', '12-71-3', '12-71-4']
如有帮助,请点击采纳。
没看明白你的问题。listA = ['09-10-03', '01-20-34-85-10-3333'] 是这样的list吗?然后排序是怎么排呢?你也没说明白,,,你举个例子,然后把结果也贴出来
首先你的问题表达并不是很清楚。 你这个 - 到底是数据吧本身的还是你用来区别不同值的?当然不管你是想表达啥,要解决都很简单,可以先拿到字符串做处理, 像前面的0的数字转换成数字即可,然后还是一样数字排序重新拼入list即可。
附源码:
@Test
void contextLoads() {
List list = new ArrayList<>();
list.add("08");
list.add("07");
list.add("12");
list.add("11");
List listAfter = new ArrayList<>();
for (int i = 0; i < list.size() - 1; i++) {//控制比较多少轮
for (int j = 0; j < list.size() - i - 1; j++) {//控制每轮比较多少次
if (Integer.parseInt(list.get(j)) > Integer.parseInt(list.get(j + 1))) {//如果前面的比后面的大,则交换数据
String temp = list.get(j + 1);
list.set((j + 1),list.get(j));
list.set(j,temp);
}
}
}
for (String i : list) {
System.out.print(i + "\t");
}
}
附截图: 当然如果你还有疑惑可以私信我
其他可参考方案:
//数字不足补0
public static String reInt(int i){
String str = "";
if(i<10){
str= (String)("0"+i);
}else{
str= i+"";
}
return str;
}
//08-07-12-41-54-12 类似结构排序 升序排序
public static void main(String[] args) {
List list = new ArrayList<>();
list.add("08");
list.add("07");
list.add("12");
list.add("11");
List listAfter = new ArrayList<>();
for(int i=0; i<list.size() ;i++){
int temp = Integer.parseInt(list.get(i));
System.out.print(temp);
for(int j=i; j<list.size(); j++){
int tempJ = Integer.parseInt(list.get(j));
if(temp>tempJ){
int tempM = temp;
temp = tempJ;
listAfter.add(reInt(temp));
}else{
listAfter.add(reInt(temp));
}
}
}
}
/**
* 数字集合排序
* @param list
*/
public static void sortList(List list){
ComparatorList cl = new ComparatorList();
Collections.sort(list, cl);
}
/**
* 内部类来自己实现比较器的接口,按照我们自己的排序规则
*
*/
static class ComparatorList implements Comparator<Integer>{
@Override
public int compare(Integer o1, Integer o2) {
// 这里返回的值,1升序 -1降序
return o1>o2 ? 1:-1;
}
}
a = '08-07-12-41-54-12'
print('-'.join(sorted(a.split('-'))))
1