Python使用小知识小技巧总结

Python使用小知识小技巧总结

闲言碎语

二进制0b, 八进制0o, 十六进制0x(进制转换二进制bin, 八进制oct,十六进制hex)
id(var_name)查看内存地址(十六进制地址hex(id(var_name)))
ord(‘a’)查看ascii编码对应的数字,如a是97
isinstance(a, str)或isinstance(a, (str, int))判断变量a是否为某一类型或某几种类型中的一种
sys.setrecursionlimit(100000) 设置递归次数上限(实际根据环境上限略有不同)
@classmethod 类方法
@staticmethod 静态方法
数据筛选

以筛选出>=0的数字为例
列表

#造数据
from random import randint
#Python 3使用range, 2使用xrange,-10到10之间的10个整数
data = [randint(-10, 10) for _ in xrange(10)]
#常规方法
res = []
for x in data:
	if x >= 0:
		res.append(x)
print res
#lambda的方法
filter(lambda x: x>=0, data)
#列表解析方法,首选,效率较上面两种方法更高
[x for x in data if x >= 0]

字典

#造数据, 20个分数在60到100之前的随机数,取分数大于90的数据
from random import randint
d = {x: randint(60,100) for x in xrange(1, 20)}
#字典解析的方法
{k:v for k,v in d.iteritems() if v > 90 }

# sorted默认是对键进行排序,如何按值进行排序呢?有以下两种方法
from random import randint
d = {x: randint(60, 100) for x in 'xyzabc'}
# sorted(zip(d.values(), d.keys())) # Python 2下使用itervalues和iterkeys效率更高
sorted(d.items(), key=lambda x: x[1])

元组
对于一些固定结构的数据我们一般会使用元组,其占用存储空间小,但语义化较弱,如何解决呢?可通过定义常量、namedtuple的方式来解决

# NAME = 0
# AGE = 1
# SEX = 2
# EMAIL = 3
NAME, AGE, SEX, EMAIL = range(4) # Python 2中使用xrange
student = ('Jim', 16, 'male', 'jim@abc.com')
print(student[NAME])
# namedtuple
from collections import namedtuple
Student = namedtuple('Student', ['name','age','sex','email'])
s = Student('Jim', 16, 'male', 'jim@abc.com')
print(s.name)

统计

from collections import Counter
import re
txt = open('test.txt').read()
c3 = Counter(re.split('\W', txt))
# 统计出现频率在前10的单词
c3.most_common(10)

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.