牛客网刷题:python基础

sort 与 sorted 区别:

sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

语法:sorted(iterable[, cmp[, key[, reverse]]])
  • iterable -- 可迭代对象。
  • cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
  • key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  • reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

先按第二个数排列 再按第一个数排列

>>> L = [('d',2),('a',4),('b',3),('c',2)]
>>> print sorted(L, key=lambda x:(x[1],x[0]))
>>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]

 

String 

string.zfill(number) 右对齐,左补0

 

 

 

1、求素数

def prime(n):
    if n<=1:
        return 0
    for i in range(2,int(math.sqrt(n)+1)):
        if n%i==0:
            return 0
    return 1
for i in range(2,100000):
    if prime(i):
        count+=1
        if count>=begin and count<=end:
            primes.append(i)
        if count==10000:
            print i


# print primes
primes = [str(i) for i in primes]
print "\n".join([i + 10 > len(primes) and " ".join(primes[i:]) or " ".join(primes[i:i+10]) for i in range(len(primes)) if i % 10 == 0])

2、密码解密

# coding : utf-8

a, b, c, d = raw_input(), raw_input(), raw_input(), raw_input()

DAY = {'A': 'MON', 'B': 'TUE', 'C': 'WED', 'D': 'THU', 'E': 'FRI', 'F': 'SAT', 'G': 'SUN'}

HH = {"0": "00", "1": "01", "2": "02", "3": "03", "4": "04", "5": "05", "6": "06", "7": "07", "8": "08", "9": "09",
      "A": "10", "B": "11", "C": "12", "D": "13", "E": "14", "F": "15", "G": "16", "H": "17", "I": "18", "J": "19",
      "K": "20", "L": "21", "M": "22", "N": "23"}

count = 0
day = ""
while True:
    if a[count] == b[count]:
        if day != "":
            hh = a[count]
            break
        elif (a[count] in DAY.keys()) and (b[count] in DAY.keys()):
            day = a[count]
    count += 1
count = 0
lst = range(97, 123)
while True:
    if ord(c[count]) in lst:
        if c[count] == d[count]:
            break
    count += 1

print DAY[day], HH[hh] + ':%02d' % (count)

3、python :二维数组 排序

从键盘输入: temp=raw_input().split(' '),列表划分

[ [],[],[],[] ]  score= [ [],[],[],[] ]

score[1].append([d,temp[0],d+c]) 列表加入

itemgetter  key=itemgetter(1)  第一列 升序   reverse=Ture  降序  key=itemgetter(2, 0) 先按第2列 降序 再0列降序

from operation import itemgetter
a = sorted(score[i], key=itemgetter(1))
a = sorted(a, key=itemgetter(2, 0), reverse=True)

德才论11.10

from operator import itemgetter
sample=raw_input()
number=[int(n) for n in sample.split(' ')]
n=number[0]
l=number[1]
h=number[2]

M=0
id_list=[]
score=[[],[],[],[]]
for i in range(n):
    temp=raw_input().split(' ')
    d=int(temp[1])
    c=int(temp[2])
    if d>=h and c>=h:
        M+=1
        score[0].append([d,temp[0],d+c])
    elif d>=h and c>=l and c=c and c>=l:
        M += 1
        score[2].append([d,temp[0],d+c])
    elif d>=l and c>=l:
        M += 1
        score[3].append([d, temp[0], d+c])
print M
# sort
for i in range(4):
    if score[i] == []:
        continue
    a = sorted(score[i], key=itemgetter(1))
    a = sorted(a, key=itemgetter(2, 0), reverse=True)
    for j in range(len(a)):
        print '%s %d %d'%(a[j][1],a[j][0],a[j][2]-a[j][0])

4、kaprekar 常数

字符串右对齐左补0  .zfill()

number=raw_input()
black=0
while True:
    number=number.zfill(4)
    s1="".join((lambda x:sorted(x,reverse=True))(list(number)))
    num1=int(s1)
    s2="".join((lambda x:sorted(x))(list(number)))
    num2=int(s2)
    black=num1-num2
    print "%04d -%04d =%04d" %(num1,num2,black)
    if black==0 or black==6174:
        break
    else:number=str(black)

 

你可能感兴趣的:(算法学习)