python竞赛_如何优雅的使用Python参加程序设计竞赛

现在好多程序设计比赛都支持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)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值