sorted(iterable, key=None, reverse=False) 和 reversed(iterable)函 数
可以处理任何可迭代对象,返回一个排序或反转的迭代器。
方法 list.sort(key=None, reverse=False) 和 list.reverse()只是列表的内置方法,对原列表操作无返回值。
s = [3, 6, 2, 7, 1, 9]
print(sorted(s)) # [1, 2, 3, 6, 7, 9]
print(s.sort()) # None
print(s) # [1, 2, 3, 6, 7, 9]
# TypeError: 'NoneType' object is not iterable,没返回值,报错
for n in word.reverse():
print(w)
# 9 1 7 2 6 3
for n in reversed(word):
print(n)
补充个 sorted 的用法,可以了解下sorded 的复杂用法:
# ['a', 'b', 'b', 'c'] 输出频率最高的前k个字符。O(NlogN)
def topKFrequent(self, words, k):
dic = {}
for word in words:
dic[word] = dic.get(word, 0) + 1
# 若 -dic[word] 相同,按word排序,题目要求同频率下按字母顺序排序
ret = sorted(dic, key=lambda word: (-dic[word], word))
return ret[:k]
sorted 返回重新排序的列表。
第一个参数是 iterable,表示可迭代的对象,也是被排序的目标,直接传入字典的话相当于是 dict.keys(),想输出 value 的话要用 dict.values(),想输出全部的话要用 dict.items()。
其形式为 lambda argument_list: expression
这里的 argument_list 是参数列表,这里的 expression 是一个关于参数的表达式,表达式中出现的参数需要在 argument_list 中有定义,并且表达式只能是单行的,所以 lamdba 的输入是传入到参数列表 argument_list 的值,输出是根据表达式 expression 计算得到的值。
这里的 word 表示匿名函数的输入,其实就是前面 iterable 的每一个迭代对象,即字典中的每个 key(不指定 items()或 values()时默认指的是 key),(-dic[word], word)) 表示匿名函数的输出,即输出了一个元组,对这个元组进行排序,用元组是因为题目要求,如果出现频率相同的,要按照字母先后进行排序,所以-dic[word] 相同的情况下,根据 word 排序。
第三个参数是 reverse,用来指定排序是倒序还是顺序,reverse=true 则是倒序,reverse=false 时则是顺序,默认 reverse=false。