python 刷题必备

1、判断输入的数字是否是回文数:

学习内容:把数字转成字符串

1.

def is_palindrome(n):  
    n=str(n)  
    m=n[::-1]  
    return n==m  

2.

tmp_str = str(n)  
i = len(tmp_str) - 1  
j = 0  
while i > j :  
  if tmp_str[i] == tmp_str[j] :  
    i = i - 1   
    j = j + 1  
    pass  
  else :   
    return False  
return True 

如果要直接接收键盘输入的话,可以直接用raw_input()即可,这样获得的就是字符串。

2.一行输出多个数字

学习内容:如何一行输出多个数字

1.

s=[1,2,3,4,5,]
s1='%d %d %d %d %d' %(s[0],s[1], s[2], s[3], s[4])
print s1

2.转换成字符串输出:

s=[1,2,3,4,5]
s2='%s' %(' '.join(map(str,s)))
print s2

 3.统计列表中元素个数

1.利用列表的count函数

mylist = [1,2,2,2,2,3,3,3,4,4,4,4]
myset = set(mylist)  #myset是另外一个列表,里面的内容是mylist里面的无重复项
for item in myset:
  print("the %d has found %d" %(item,mylist.count(item)))

2.利用字典

List=[1,2,2,2,2,3,3,3,4,4,4,4]
a = {}
for i in List:
    #i是元素,不是索引,所以a[i]表示key
    a[i] = List.count(i)
print (a)

3.利用Counter类,Counter类的学习:http://www.cnblogs.com/shixisheng/p/7410505.html

from collections import Counter
Counter([1,2,2,2,2,3,3,3,4,4,4,4])
#输出:Counter({1: 1, 2: 4, 3: 3, 4: 4})

 4.把数组组成最小的数

题目描述

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
# -*- coding:utf-8 -*-
class Solution:
    def PrintMinNumber(self, numbers):
        # write code here
        num_str=map(str,numbers)
        if not num_str:
            return ''
        num_str.sort(lambda x,y:cmp(x+y,y+x))
        return ''.join(num_str)

思路:用lambda表达式写一个比较规则。

自定义比较函数:http://www.cnblogs.com/shixisheng/p/7500407.html

 5.字符串的全排列

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

使用递归方法:假如n-1个字符串都已经有了,那么加入第n个字符的时候,可以让n依次和前边n-1个字符进行交换。

实例代码:假如字符串strAP=['A','B','C','D']

# -*- coding:utf-8 -*-

def SWAP(i, j):
    temp = strAP[i]
    strAP[i] = strAP[j]
    strAP[j] = temp

strAP = ['A', 'B', 'C', 'D']
result = []
def CalAllP1(first, num):
    if first == num - 1:  # 到达最后一个元素,则退出
        pass
    else:
        for i in range(first, num):
            if i != first:  # 输出时去掉重复
                SWAP(i, first)
                temp = ''.join(strAP)
                result.append(temp)
            CalAllP1(first + 1, num)  # 递归调用,全排列后面的元素
            SWAP(i, first)# 用来复位的(前边你交换了,这里再交换回来)。

temp = ''.join(strAP)
result.append(temp)
CalAllP1(0, len(strAP))
print result

完整的代码:

# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.strAP=[]
        self.result=[]
    def Permutation(self, ss):
        # write code here
        if not ss:
            return []
        self.strAP=list(ss)
        temp = ''.join(self.strAP)
        self.result.append(temp)
        self.CalAllP1(0, len(self.strAP))
        self.result=sorted(list(set(self.result)))#用set去除重复,然后再转化成list,然后再排序
        return self.result
        
        
    def SWAP(self, i, j):
        temp = self.strAP[i]
        self.strAP[i] = self.strAP[j]
        self.strAP[j] = temp
        
        
    def CalAllP1(self, first, num):
        if first == num - 1:  # 到达最后一个元素,则退出
            pass
        else:
            for i in range(first, num):
                if i != first:  # 输出时去掉重复
                    self.SWAP(i, first)
                    temp = ''.join(self.strAP)
                    self.result.append(temp)
                self.CalAllP1(first + 1, num)  # 递归调用,全排列后面的元素
                self.SWAP(i, first)#用来复位的

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值