侧边栏壁纸
  • 累计撰写 30 篇文章
  • 累计创建 40 个标签
  • 累计收到 3 条评论

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

kiko
2021-04-16 / 3 评论 / 0 点赞 / 434 阅读 / 3,545 字
温馨提示:
本文最后更新于 2022-02-26,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

==4月17日,参加浙江大学生程序竞赛(ACM),为此整理一份python笔记。 #F44336==

标准输入输出

标准输入

输入多个字符串

str1, str2 = input().split(' ')

输入整数序列

intlist = list(map(int, input().split(' ')))

多组输入

while True:
    try:
        a = input()
    except EOFError:
        break

多样例输入一组整数,要求输出整数的平方,每个结果占一行

import sys    
for line in sys.stdin:
    print int(line)**2

标准输出

输出字符串

print("Name:%s"%('Jack'))

输出整数

print("Age:%d"%(12))

输出浮点数

print("Height:%f"%(160.5))

输出控制位数(四舍五入)

print("Heihgt:%.2f"%(160.5))

输出左端对齐

print("Name:%-8s"%('Jack'))

各个进制

print("十进制:%d,八进制:%o,十六进制%x,二进制%b"%(12,12,12,12))

输出指数

print("%e"%9)

使用0作为占位符

print("Age:%08d"%(12))

Print函数不换行

print("fuck",end='')

要求输出列表listt中的每一个数字,每个数字间有一个空格,但末尾不能有空格

strr = ''  # 创建一个空字符串
for i in listt:
    strr += str(i)+' '  # 数字后面加了一个空格
print strr[:-1]  # 使用切片,去掉了最后一个空格

相对于C/C++更加Pythonic的小技巧

链式比较

1 <= b <= a < 10  #True

真值判断

name = 'Tim'
langs = ['AS3', 'Lua', 'C']
info = {'name': 'Tim', 'sex': 'Male', 'age':23 }

if name and langs and info:
    print('All True!')  #All True!

字符串反转

def reverse_str( s ):
    return s[::-1]

列表连接

strList = ["Python", "is", "good"]  
res =  ' '.join(strList)

列表求乘积

from operator import mul
prod = reduce(mul, numList, 1)

一键列表

l = [x*x for x in range(10) if x % 3 == 0]

字典判断并添加新内容

dic = {'name':'Tim', 'age':23}

dic['workage'] = dic.get('workage',0) + 1
#dic = {'age': 23, 'workage': 1, 'name': 'Tim'}

for...else检查是否退出

for x in xrange(1,5):
    if x == 5:
        print 'find 5'
        break
else:
    print 'can not find 5!'

同时得到索引和值

array = [1, 2, 3, 4, 5]

for i, e in enumerate(array,0):
    print i, e

大小写转换

a.upper()#全部转大写
a.lower()#全部转小写

swap

a,b=b,a

当你真的害怕copy到引用时

import copy
b = copy.deepcopy(a)

列表操作

列表初始化

带有重复元素的初始化

listt = [0]*5

递增初始化

listt = list(range(10))
#注意 网传的listt=range(10)在python3是错误的写法

初始化一个二维数组

multilist = [[0] * 5 for row in range(3)]
#注意 [[0]*5]*3是不对的 自己想为什么

列表拼接

拼接运算符

#+
[1, 2, 3] + [4, 5, 6]
#extend
[1,2,3].extend([4,5,6])

列表切片

带步长的切片

num2[1:5:2]
#第三个数字代表步长

反转切片

num2[::-1]

删除列表元素

del

del a[0]
#删除index为0的元素

remove

a.remove('a')
#删除元素为'a'的元素,若有重复删除最前面的一个

pop

a.pop(0)
#删除index为0元素且返回元素值

列表排序

升序排序

sorted([5, 2, 3, 1, 4])

任意顺序排序

sorted(a, reverse=True)#降序
sorted(a, reverse=False)#升序

按某个键值排序

sorted(student_objects, key=attrgetter('age'))

按长度排序

a = ['i', 'love', 'python']
sorted(a, key=len)

按首字母排序

sorted(a, key= lambda x:x[0])

二分查找到合适的位置

import bisect

c=[1,2,1,-1,4,5]
c.sort()
bisect.bisect(c, 2)#返回2合适的插入位置

列表常用内置函数

添加在最后

list.append(obj)

统计某个元素在列表中出现次数

list.count(obj)

找出第一个匹配元素的索引

list.index(obj)

字典操作

字典初始化

普通初始化

dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}

默认初始化

#经典案例
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])]

默认字典统计词频

>>> s = 'mississippi'
>>> d = defaultdict(int)
>>> for k in s:
...     d[k] += 1
...
>>> d.items()
[('i', 4), ('p', 2), ('s', 4), ('m', 1)]

字典常用函数

返回(key:value)元组列表

radiansdict.items()

返回所有键

radiansdict.keys()

返回所有值

radiansdict.value()

删除

d.pop('key')

字典小技巧

通过value查找key

list (student.keys()) [list (student.values()).index ('1004')]
#返回的是一个list

高效率合并两个dict

dict(dict1, **dict2)

字典推导式

numbers = [1, 2, 3]
d = {number: number * 2 for number in numbers}

集合操作

集合运算

a & b

a | b

a - b

不同时在a和b中的

a ^ b

标准库

math

pai

pai = math.pi

自然指数

e = math.e

向上向下取整

math.ceil(x)#向上
math.floor(x)#向下

绝对值

math.fabs(x)

math.pow(x,y)

log

math.log(x,a)

sin cos tan

math.sin(x)  
math.cos(x)
math.tan(x)

datetime

生成日期

a=datetime.date(2017,3,1)

日期字符输出

a.strftime("%Y%m%d")

生成时间

a = datetime.time(12,20,59,899)

时间字符输出

a.strftime('%H:%M:%S')

获取时间/日期差

(end_time - start_time).seconds
(end_time - start_time).days

加上时间

d2 = d1 + datetime.timedelta(hours = 8)

其他

输入输出重定向到文件

with open('in.txt', 'r') as in_file, open('out.txt', 'w') as out_file:
sys.stdin = in_file
sys.stdout = out_file
# ...

增大递归调用的层数

sys.setrecursionlimit(int(1e5))
0

评论区