不废话了,直接上例子:
res1 = sorted([2,3,1], reverse=True)
print(res1)
#[3, 2, 1]
res2 = sorted({1:3,2:1}.items(), reverse=True)
print(res2)
#[(2, 4), (1, 3)]
res3 = sorted({1:3,2:1}.items(), key=lambda x : x[1], reverse=True)
print(res3)
#[(1, 3), (2, 1)]
k,v=(1,3)
print(k,v)
#1,3
res4 = sorted([])
print(res4)
#[]
数字拼接题目
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
输入: [10,2]
输出: "102"
输入: [3,30,34,5,9]
输出: "3033459"
输入: [1,10,11,12]
输出: "1011112"
方案一: 把数字映射成单一优先级
def compare_num(input_lst):
def get_priority(item, maxl):
item_str = str(item)
item_len = len(item_str)
if item_len == maxl:
return item, item_str
else:
return item, item_str+(maxl-item_len)*item_str[0]
maxl = max(map(lambda x:len(str(x)), input_lst))
pairs = list(map(lambda x:get_priority(x, maxl), input_lst))
sorted_pairs = sorted(pairs, key = lambda x : x[1])
outs = "".join([str(i) for i, j in sorted_pairs])
return outs
if __name__ == '__main__':
print(compare_num([3,30,34,5,9]))
方案二: 直接sort传入lambda表达式两个参数
import functools
def minNumber(nums):
str_nums = list(map(str, nums))
def compare(a, b):
if a + b < b + a:
return -1
else:
return 1
# 需要背下来functools.cmp_to_key
str_nums.sort(key=functools.cmp_to_key(compare))
result = ''.join(str_nums)
if all(c == '0' for c in result):
return '0'
else:
return result
print(minNumber([3,30,34,5,9]))