sort、sorted
- 可以按照长短,大小,英文字母的顺序对可迭代的序列排序生成新的序列。
- 这里只展示sorted()的用法
sorted(iterable, key=None, reverse=False) #注在python2中该函数还有个cmp参数,不过在3中取消了
- 参数:
方法 | 描述 |
---|---|
iterable | 可迭代对象。 |
cmp | (了解):用于比较的函数,比较什么由key决定; |
key | 主要是用来进行比较的元素,只有一个参数。用列表元素的某个属性或函数作为关键字,有默认值,迭代集合中的一项(指定可迭代对象中的一个元素来进行排序。) |
reverse | 排序规则,reverse = True 降序 , reverse = False 升序(默认)。 |
-
返回值:
返回重新排序的列表。 -
代码
list = [5, 2, 3, 1, 4] new_list = sorted(list) print(new_list,list) #[1, 2, 3, 4, 5] [5, 2, 3, 1, 4]
list = [5, 2, 3, 1, 4] new_list = sorted(list,reverse = True) print(new_list,list) #[5, 4, 3, 2, 1] [5, 2, 3, 1, 4]
sorted配合lambda进行关键字排序
-
按照某个元素排序
list = [('b',2),('a',1),('c',3),('d',4)] new_list = sorted(list, key=lambda list:list[1],reverse=True) #序列为第一个参数的序列(list[1]表示按任意元素中索引为1的元素排序) print(new_list) #[('d', 4), ('c', 3), ('b', 2), ('a', 1)]
-
按照元素长度排序
List = [{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}] def f(x): return len(x) new_list = sorted(List,key = f) #按照元素长度排序 print(new_list) #[{1: 9}, {1: 5, 3: 4}, {1: 3, 6: 3}, {1: 1, 2: 4, 5: 6}]
-
任意元素排序
List = ['Chr1-10.txt','Chr1-1.txt','Chr1-2.txt','Chr1-14.txt','Chr1-3.txt','Chr1-20.txt','Chr1-5.txt'] def func(element): return int(element.split('-')[1].split('.')[0])#对元素进行连续两次切片操作(比较函数的参数表示列表中的任意元素)
new_list = sorted(List, key=func)
另外一种写法
new_list = sorted(List, key=lambda d : int(d.split('-')[-1].split('.')[0]))
print(new_list)
['Chr1-1.txt', 'Chr1-2.txt', 'Chr1-3.txt', 'Chr1-5.txt', 'Chr1-10.txt', 'Chr1-14.txt', 'Chr1-20.txt']
### 练习
- 对下面的list进行排序
```py
aa = [
['L1_Chr_CharB_RIG2:Geometry', 'L1_Chr_CharB_RIG1:Geometry'],
['L1_Chr_CharC_RIG1:Geometry', 'L1_Chr_CharC_RIG:Geometry'],
['L1_Chr_CharA_RIG1:Geometry', 'L1_Chr_CharA_RIG:Geometry']
]
-
代码
我这里只是给出其中的一种方法,进行排序的方法并不是只有这一种
def sort_List_list(aa): #创建一个列表用来存排序后的数据 bb=[] #遍历传入的列表,优先对list中的list排序 for item in range(len(aa)): #排序 aa[item].sort(reverse=False) #因为符号':'ASCII码在数字的后面,没有数字的会排在最后,这里用一个冒泡的写法,对条件为【len()>=2的 且 item的最后一个没有数字】的最后一个的值与第一个进行替换, if aa[item][len(aa[item])-1].split(':')[0].rsplit('G')[1]=='' and len(aa[item]) >= 2: ite=aa[item][0] aa[item][0]=aa[item][len(aa[item])-1] aa[item][len(aa[item])-1]=ite #将排序后的值填入新的list bb.append(aa[item]) #用lambda+sorted对list进行排序,标准为第一项 bb = sorted(bb, key=lambda bb : bb[0]) return bb aa = [ ['L1_Chr_CharB_RIG2:Geometry', 'L1_Chr_CharB_RIG1:Geometry'], ['L1_Chr_CharC_RIG1:Geometry', 'L1_Chr_CharC_RIG:Geometry'], ['L1_Chr_CharA_RIG1:Geometry', 'L1_Chr_CharA_RIG:Geometry'] ] aa=sort_List_list(aa) for ietm in aa: print ietm