现在好多程序设计比赛都支持python语言了,之前用的比较多的是Pandas、Numpy、Sklearn、Igraph这些库,倒是把基础的操作的忘了。写了个Python语言的Cheetsheet,如有错误,还望指出。
标准输入输出
1. 标准输入
1.1 输入多个字符串:
str1, str2 = input().split(' ')
1.2 输入整数序列:
intlist = list(map(int, input().split(' ')))
1.3 多组输入:
while True:
try:
a = input()
except EOFError:
break
1.4 多样例输入一组整数,要求输出整数的平方,每个结果占一行:
import sys
for line in sys.stdin:
print int(line)**2
2. 标准输出
2.1 输出字符串
print("Name:%s"%('Jack'))
2.2 输出整数
print("Age:%d"%(12))
2.3 输出浮点数
print("Height:%f"%(160.5))
2.4 输出控制位数(四舍五入)
print("Heihgt:%.2f"%(160.5))
2.5 输出左端对齐
print("Name:%-8s"%('Jack'))
2.6 各个进制
print("十进制:%d,八进制:%o,十六进制%x,二进制%b"%(12,12,12,12))
2.7 输出指数
print("%e"%9)
2.8 使用0作为占位符
print("Age:%08d"%(12))
2.9 Print函数不换行
print("fuck",end='')
2.a 要求输出列表listt中的每一个数字,每个数字间有一个空格,但末尾不能有空格
strr = '' # 创建一个空字符串
for i in listt:
strr += str(i)+' ' # 数字后面加了一个空格
print strr[:-1] # 使用切片,去掉了最后一个空格
相对于C/C++更加Pythonic的小技巧
1.1 链式比较
1 <= b <= a < 10 #True
1.2 真值判断
name = 'Tim'
langs = ['AS3', 'Lua', 'C']
info = {'name': 'Tim', 'sex': 'Male', 'age':23 }
if name and langs and info:
print('All True!') #All True!
1.3 字符串反转
def reverse_str( s ):
return s[::-1]
1.4 列表连接
strList = ["Python", "is", "good"]
res = ' '.join(strList)
1.5 列表求乘积
from operator import mul
prod = reduce(mul, numList, 1)
1.6 一键列表
l = [x*x for x in range(10) if x % 3 == 0]
1.7 字典判断并添加新内容
dic = {'name':'Tim', 'age':23}
dic['workage'] = dic.get('workage',0) + 1
#dic = {'age': 23, 'workage': 1, 'name': 'Tim'}
1.8 for...else检查是否退出
for x in xrange(1,5):
if x == 5:
print 'find 5'
break
else:
print 'can not find 5!'
1.9 同时得到索引和值
array = [1, 2, 3, 4, 5]
for i, e in enumerate(array,0):
print i, e
1.a 大小写转换
a.upper()#全部转大写
a.lower()#全部转小写
1.b swap
a,b=b,a
1.c 当你真的害怕copy到引用时
import copy
b = copy.deepcopy(a)
列表操作
1. 列表初始化
1.1 带有重复元素的初始化
listt = [0]*5
1.2 递增初始化
listt = list(range(10))
#注意 网传的listt=range(10)在python3是错误的写法
1.3 初始化一个二维数组
multilist = [[0] * 5 for row in range(3)]
#注意 [[0]*5]*3是不对的 自己想为什么
2. 列表拼接
2.1 拼接运算符
[1, 2, 3] + [4, 5, 6]
2.2 extend
[1,2,3].extend([4,5,6])
3. 列表切片
3.1 带步长的切片
num2[1:5:2]
#第三个数字代表步长
3.2 反转切片
num2[::-1]
4. 删除列表元素
4.1 del
del a[0]
#删除index为0的元素
4.2 remove
a.remove('a')
#删除元素为'a'的元素,若有重复删除最前面的一个
4.3 pop
a.pop(0)
#删除index为0元素且返回元素值
5. 列表排序
5.1 升序排序
sorted([5, 2, 3, 1, 4])
5.2 任意顺序排序
sorted(a, reverse=True)#降序
sorted(a, reverse=False)#升序
5.3 按某个键值排序
sorted(student_objects, key=attrgetter('age'))
5.4 按长度排序
a = ['i', 'love', 'python']
sorted(a, key=len)
5.5 按首字母排序
sorted(a, key= lambda x:x[0])
5.6 二分查找到合适的位置
import bisect
c=[1,2,1,-1,4,5]
c.sort()
bisect.bisect(c, 2)#返回2合适的插入位置
6. 列表常用内置函数
6.1 添加在最后
list.append(obj)
6.2 统计某个元素在列表中出现次数
list.count(obj)
6.3 找出第一个匹配元素的索引
list.index(obj)
字典操作
1. 字典初始化
1.1 普通初始化
dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
1.2 默认初始化
#经典案例
from collections import defaultdict
>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
>>> d = defaultdict(list)
>>> for k, v in s:
... d[k].append(v)
...
>>> d.items()
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
1.3 默认字典统计词频
>>> s = 'mississippi'
>>> d = defaultdict(int)
>>> for k in s:
... d[k] += 1
...
>>> d.items()
[('i', 4), ('p', 2), ('s', 4), ('m', 1)]
2. 字典常用函数
2.1 返回(key:value)元组列表
radiansdict.items()
2.2 返回所有键
radiansdict.keys()
2.3 返回所有值
radiansdict.value()
2.4 删除
d.pop('key')
3. 字典小技巧
3.1 通过value查找key
list (student.keys()) [list (student.values()).index ('1004')]
#返回的是一个list
3.2 高效率合并两个dict
dict(dict1, **dict2)
3.3 字典推导式
numbers = [1, 2, 3]
d = {number: number * 2 for number in numbers}
集合操作
1. 集合运算
1.1 交
a & b
1.2 并
a | b
1.3 补
a - b
1.4 不同时在a和b中的
a ^ b
标准库
1.math
1.1 pai
pai = math.pi
1.2 自然指数
e = math.e
1.3 向上向下取整
math.ceil(x)#向上
math.floor(x)#向下
1.4 绝对值
math.fabs(x)
1.5 幂
math.pow(x,y)
1.6 log
math.log(x,a)
1.7 sin cos tan
2. datetime
2.1 生成日期
a=datetime.date(2017,3,1)
2.2 日期字符输出
a.strftime("%Y%m%d")
2.3 生成时间
a = datetime.time(12,20,59,899)
2.4 时间字符输出
a.strftime('%H:%M:%S')
2.5 获取时间/日期差
(end_time - start_time).seconds
(end_time - start_time).days
2.6 加上时间
d2 = d1 + datetime.timedelta(hours = 8)
3. json
这个板块一般不会用到,但是也说不定呢?
3.1 json编码
jsonn = json.dumps(data)
3.2 json解码
data = json.loads(jsonn)