0.如何查看Python有哪些内建函数?
如何查看Python中有哪些builtin函数/方法?
进入IPython;
输入:from __builtin__ import [Tab] #{连续按Tab进行补全}
1.The Python Challenge
- The Python Challenge
- Solutions
- Solutions for the Python Challenge—Possible solutions for all challenges
- ProblemSets – Python Wiki
- python challenge – AOL Search
2.Unicode编码
#coding=utf-8
import sys
print sys.getdefaultencoding() # --> ascii
u1 = '中国'
print type(u1), repr(u1) # --> <type 'str'> '\xe4\xb8\xad\xe5\x9b\xbd'
u2 = u'中国2009'
print type(u2), repr(u2) # --> <type 'unicode'> u'\u4e2d\u56fd2009'
# str --> unicode
print '# str --> unicode'
u1_1 = u1.decode('utf8')
print type(u1_1), repr(u1_1) # --> <type 'unicode'> u'\u4e2d\u56fd'
u1_2 = unicode(u1, 'utf8')
print type(u1_2), repr(u1_2) # --> <type 'unicode'> u'\u4e2d\u56fd'
# unicode --> str
print
print '# unicode --> str'
u2_1 = u2.encode('utf8')
print type(u2_1), repr(u2_1) # --> <type 'str'> '\xe4\xb8\xad\xe5\x9b\xbd2009'
u2_2 = u2.encode('gbk')
print type(u2_2), repr(u2_2) # --> <type 'str'> '\xd6\xd0\xb9\xfa2009'
u2_3 = u2.encode('gb2312')
print type(u2_3), repr(u2_3) # --> <type 'str'> '\xd6\xd0\xb9\xfa2009'
3.Python和日期相关的代码{datetime模块}
import datetime
for day in range(30):
print (datetime.datetime.today()-datetime.timedelta(days=day)).strftime('%Y-%m-%d')
day_end = (datetime.datetime.today()-datetime.timedelta(days=2)).strftime('%Y-%m-%d')
day_start = (datetime.datetime.today()-datetime.timedelta(days=9)).strftime('%Y-%m-%d')
####
date = '2014-10-18'
stime = datetime.datetime.strptime(date, '%Y-%m-%d')
etime = stime + datetime.timedelta(days=1)
4.IP与整数的相互转换
def IP2Int(ip):
o = map(int, ip.split('.'))
res = (16777216 * o[0]) + (65536 * o[1]) + (256 * o[2]) + o[3]
return res
def Int2IP(ipnum):
o1 = int(ipnum / 16777216) % 256
o2 = int(ipnum / 65536) % 256
o3 = int(ipnum / 256) % 256
o4 = int(ipnum) % 256
return '%(o1)s.%(o2)s.%(o3)s.%(o4)s' % locals()
5.Python的内部函数any的使用
if needle.endswith('ly') or needle.endswith('ed') or needle.endswith('ing') or needle.endswith('ers'):
print('Is valid')
else:
print('Invalid')
#
if needle in ('ly', 'ed', 'ing', 'ers'):
print('Is valid')
else:
print('Invalid')
#
if any([needle.endswith(e) for e in ('ly', 'ed', 'ing', 'ers')]):
print('Is valid')
else:
print('Invalid')
上面的代码十分优雅的解决了:检测”一段string是否以特定的字符串结尾?”的问题,给力啊!{参考:Python语言的一小点优雅表现}
6.Python判断字符串是否包含子串的方法
Python的string对象没有contains方法,不能使用string.contains的方法判断某个字符串是否包含某一子串,但是Python有更简单的方法实现该功能。
方法1:使用 in 方法
site = 'http://ixyzero.com/blog/'
if "crazyof" in site:
print('site contains crazyof')
#输出结果:site contains crazyof
方法2:使用 find 函数
s = "This be a string"
if s.find("is") == -1:
print "No 'is' here!"
else:
print "Found 'is' in the string."
方法3:使用 count 函数
s = "This be a string"
if s.count("is") > 0:
print "Found 'is' in the string."
7.判断字符串是否包含子字符串中所有字符的实现(Python)
#!/usr/bin/env python
# -*- coding: utf8 -*-
# Python 2.7.2
"""
问题:假设这有一个由各种字母组成的字符串,假设这还有另外一个字符串,而且这个字符串里的字母数相对少一些。从算法上讲,什么方法能最快的查出所有小字符串里的字母在大字符串里都有?
比如,如果是下面两个字符串:
String a: ABCDEFGHLMNOPQRS
String b: DCGSRQPOM
答案是true,所有在string b里的字母string a也都有。
如果是下面两个字符串:
String a: ABCDEFGHLMNOPQRS
String b: DCGSRQPOZ
答案是false,因为第二个字符串里的Z字母不在第一个字符串里。
"""
def a_has_b(a, b):
"""判断字符串a中是否包含b中的所有字符
"""
dictionary = 0
#每个字母的ASCII码值,可以对应一个位图中的位。
#先遍历第一个字符串,生成一个“位图字典”。
for a_ch in a:
dictionary |= (0x01 << (ord(a_ch) - ord('A')))
#我们遍历第二个字符串,用查字典的方式较检,伪代码为
for b_ch in b:
if dictionary != (dictionary |(0x01 << (ord(b_ch) - ord('A')))):
return False
return True
#主函数,测试部分
str1="abcdefghijklmnopqrstuvwxyz"
str2="akjsdfasdfiasdflasdfjklffhasdfasdfjklasdfjkasdf"
str3="asdffaxcfsf"
str4="asdfai"
print(a_has_b(str1, str2))
print(a_has_b(str1, str3))
print(a_has_b(str3, str4))