python sorted

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/he_wen_jie/article/details/82850532

sorted排序

val=[3,5,1,4,2]

# 递增
res = sorted(val)
print res
# output [1,2,3,4,5]

# 递减
res = sroted(val,reverse=True)
print res
# output [5,4,3,2,1]

按某个关键字排序

val = [(5,5),(6,1),(6,2),(3,3),(2,2),(2,1),(1,1)]

# 第一个关键字排序
res = sorted(val,key=lambda x : x[0])
# [(1, 1), (2, 2), (2, 1), (3, 3), (5, 5), (6, 1), (6, 2)]

# 第一个关键字排序
res = sorted(val,key=lambda x : x[1])
# [(6, 1), (2, 1), (1, 1), (6, 2), (2, 2), (3, 3), (5, 5)]

两个关键字比较

val = [(5,5),(6,1),(6,2),(3,3),(2,2),(2,1),(1,1)]

# 先按第一个,然后第二个
sorted(val,key = lambda x:(x[0],x[1]))

# [(1, 1), (2, 1), (2, 2), (3, 3), (5, 5), (6, 1), (6, 2)]

编程题

有一堆箱子,大的箱子放下面,小的箱子放上面。小箱子的长和宽都小于等于的时候,可以将小的放到大的上面,问最多可以放几层(摞几个)。

先按长进行排序,然后在对宽进行排序,长有序的情况下,找宽的最大不减子序列(不需要完全递增,可以相等的)

输入
5
2 4
2 2
2 3
5 5
3 3


N = int(raw_input())
point = []
for _ in range(N):
    point.append(map(int,raw_input().split()))
	    
point = sorted(point, key=lambda x : (x[0],x[1]))

x,y = zip(*point)

dp = [1] * len(y)

for i in range(len(y)):
    for j in range(i):
        if y[i] >= y[j]:
            dp[i] = max(dp[i],dp[j]+1)

print dp[-1]

猜你喜欢

转载自blog.csdn.net/he_wen_jie/article/details/82850532