Python对可迭代对象进行排序

程序趣事:世界上只有两种编程语言:被人抱怨的和没人使用的。

  • sorted(iterable, key=None, reverse=False)
    这里key用于从待排序元素中提取用于比较的键,通常为一个函数,且函数只有一个参数
    reverse用来控制是否对排序结果进行倒序输出
    函数的返回值为新排序的列表
    对于列表,也可以用list.sort()函数,不过该函数返回值为None,是在原列表上直接进行排序,相对而言sorted()函数的适用对象更广
#对元组进行排序
tuple_a=(10,2,13,54,5)
sorted(tuple_a)#[2, 5, 10, 13, 54],返回的是列表
#对字符串进行排序
str_a='fgcdasb'
sorted(str_a)#['a', 'b', 'c', 'd', 'f', 'g', 's']
#对字典进行排序
dict_a={'f':1,'s':23,'b':34,'kk':3}
sorted(dict_a)#['b', 'f', 'kk', 's'],返回的是字典的key值排序
#对于字典,也可以对值来排序,如下
dict_a={'f':1,'s':23,'b':34,'kk':3}
sorted(dict_a.values())#[1, 3, 23, 34]
#还可以对字典指定key来进行排序
dict_b = [{"age":20,"name":"a"},{"age":25,"name":"b"},{"age":10,"name":"c"}]
dict_b = sorted(dict_b,key=lambda x:x["age"])
print(dict_b)#[{'age': 10, 'name': 'c'}, {'age': 20, 'name': 'a'}, {'age': 25, 'name': 'b'}]

涉及到排序,和之前的max()函数类似,设计到比较,注意不要将不同类型的key进行比较,比如str和int
至于key,可以通过lambda函数按照自己的需求进行控制

list_a=['AbsGdhsawK','sawhda','asadwsaw']
sorted(list_a,key=lambda x:x[1])#比较字符串的第二个字母
#['sawhda', 'AbsGdhsawK', 'asadwsaw']
  • @staticmethod:将方法转换为静态方法,静态方法不会接收隐式的第一个参数
    这里静态方法主要是区别于类方法和实例方法,他们三者的调用方法如下表
/ 实例方法 类方法 静态方法
a=A() a.func(x) a.class_func(x) a.static_func(x)
A 不可用 A.class_func(x) A.static_func(x)

三种函数的申明方式如下

class A(object):
    def func_a(self,x):
        print('executing foo(%s,%s)'%(self,x))
  
    @classmethod
    def class_method(cls,x):
        print("executing class_foo(%s,%s)"%(cls,x))
  
    @staticmethod
    def static_method(x):#不需要传递第一个隐式参数cls或者self
        print("executing static_foo(%s)"%x)
        
a=A()
print(a.func_a(2))#实例调用实例方法executing foo(<__main__.A object at 0x0000021C8215D748>,2)
print(a.class_method(2))#实例调用类方法,executing class_foo(,2)
print(a.static_method(2))#实例调用静态方法.executing static_foo(2)
print(A.class_method(2))#类调用类方法,executing class_foo(,2)
print(A.static_method(2))#类调用静态方法,executing static_foo(2)

类方法,静态方法参考博客

你可能感兴趣的:(Python对可迭代对象进行排序)