ACM python 输入输出简记
基本函数
输入:Python的输入是字符串,所以要自己转类型
strip去掉左右两端的空白符,返回str
slipt把字符串按字符(默认空白符)拆开,返回[str] ,
map把list里面的值映射到指定类型,返回[type]
EOF用抓异常
print后面加逗号就不会换行,否则反之。
其他常用处理函数
sort sorted 注意前者无返回值,直接对原列表处理,后者返回一个新的列表。
sort(iterable, cmp=None, key=None, reverse=False)
sorted(iterable, cmp=None, key=None, reverse=False)
list
对于list的操作简单记录一下
list = [] #定义
list.append(a) #在数组的末尾添加元素a
list.insert(i,a) #i为在哪一个位置插入a
list.extend([]) # 把某个列表插到list中,参数是一个列表
list.index(a) #在列表中搜索元素a,返回其位置
list.index(a,0,5) #在0,5搜索
list.remove(a) #删除第一个次出现的a
len(list) #列表长度
del list #把list在内存中清除
del list[1] #把list[1]删除
list[1:3] #只是拷贝 list[1],list[2] (3-1=2只有两个元素)
list1 = list[:] #列表拷贝
list2 = list #只是相等,list变,list2也变,只是指定另一个名字罢了
#列表之间的比较 默认从[0]开始
list = list1 + list2 # 合并列表
list * 3
# 列表判断元素
a in list
a not in list
list.count(a) #a在list中出现的次数
list.reserve() #翻转
list.sort()
list.sort(reserve = true) #从大到小
字典
删除
# del
# 使用del删除键值对,先要找到dict所对应的键,进行删除
# 注意,在字典中键值对是成对出现的,删除键值也就消失了,不能出现单独的键或者单独的值
dict1 = {'name': 'xiaoming', 'age': 18}
del dict1['age']
print(dict1) # {'name': 'xiaoming'}
# clear() 清空字典
# 使用clear将字典所对应的内存空间中的数据进行了清空
dict1.clear()
print(dict1) # {}
# 通过之前的学习经验我们猜测 pop是删除简直对用的
dict2 = {'name': 'xiaoming', 'age': 18, 'gender': '男'}
# 使用pop可以根据指定的key删除键值对
# 使用pop删除键值对后会将其键对应的值进行返回
# print(dict2.pop('name')) # xiaoming
# print(dict2) # {'age': 18, 'gender': '男'}
# 猜测:popitem也是删除键值对使用的
# 随机删除一个键值对,一般都是删除最后一个
# 删除后会将我们所删除的键值对以元组的形式进行返回
print(dict2.popitem()) # ('gender', '男')
print(dict2.popitem()) # ('age', 18)
print(dict2) # {'name': 'xiaoming'}
# dict 无序的 因为其不能通过索引进行键值对的获取(了解)
# Python3.5以后,字典中键值对的顺序和我们插入键值对的顺序保持一致,但是该顺序没法被利用(了解)
查询
# 直接使用key进行查询
dict1 = {'name': '小明', 'age': 18, 'gender': '男', 'id': '001'}
# 查询学员的名称?
print(dict1['name'])
# get查询
# 如果我们查询的键不存在会真么样??? 报错
# KeyError: 'apple' 会出现keyerror 表示查询的键不存在 报错
# print(dict1['apple'])
# 使用get进行查询,只需要在get中传入对应的键即可
# 如果使用get查询的键不存在,则不会报错,会默认返回一个None
print(dict1.get('name')) # 小明
print(dict1.get('apple')) # None
# 如果查询的键不存在,get可以自定义默认返回值
# 格式 字典.get(要查询的键, 查询的键不存在时返回的数据)
print(dict1.get('apple', '小刚'))
print(dict1.get('apple', 9))
# keys 获取当前字典中所有的键
print(dict1.keys()) # dict_keys(['name', 'age', 'gender', 'id'])
# keys返回的内容不是列表,而是dict_keys,该数据类型不能直接使用索引查询数据,但是可以进行for遍历
print(type(dict1.keys())) # <class 'dict_keys'>
keys_1 = dict1.keys()
# 不能使用索引查询
# TypeError: 'dict_keys' object is not subscriptable
# print(keys_1[1])
# 可以被迭代
for i in keys_1:
print(i)
# values 获取当前字典中所有的值
print(dict1.values()) # dict_values(['小明', 18, '男', '001'])
# dict_values不能使用索引查询,但是可以迭代
print(type(dict1.values())) # <class 'dict_values'>
# items 获取当前字典中所有的键值对,键值对以元组形式展示
print(dict1.items()) # dict_items([('name', '小明'), ('age', 18), ('gender', '男'), ('id', '001')])
# dict_items不能使用索引查询,但是可以迭代
print(type(dict1.items())) # <class 'dict_items'>
排序
# 单独打印出排序后的key值
new_sys = sorted(sys)
print(new_sys)
new_sys = sorted(sys.keys())
print(new_sys)
# 根据key的升序排列,把key value都打印出来
new_sys1 = sorted(sys.items(), key=lambda d: d[0], reverse=False)
print(new_sys1)
new_sys1 = sorted(sys.items(), reverse=False)
print(new_sys1)
# ============================================== #
# 单独打印出排序后的value值
new_sys1 = sorted(sys.values())
print(new_sys1)
# 打印出根据value排序后的键值对的具体值
new_sys2 = sorted(sys.items(), key=lambda d: d[1], reverse=False)
print(new_sys2)
格式化
对于输出的处理格式:
%f ——保留小数点后面六位有效数字
%.3f,保留3位小数位
%e ——保留小数点后面六位有效数字,指数形式输出
%.3e,保留3位小数位,使用科学计数法
%g ——在保证六位有效数字的前提下,使用小数方式,否则使用科学计数法
%.3g,保留3位有效数字,使用小数或科学计数法
%s
%10s——右对齐,占位符10位
%-10s——左对齐,占位符10位
%.2s——截取2位字符串
%10.2s——10位占位符,截取两位字符串
print('%d %d %d'%(a, b, c)) # 在一个括号内进行多个格式化输出)
四舍五入
round(number[, ndigits])
参数:
number - 这是一个数字表达式。
ndigits - 表示从小数点到最后四舍五入的位数。默认值为0。
返回值
该方法返回x的小数点舍入为n位数后的值。
>>> round(1.1125) # 四舍五入,不指定位数,取整
1
>>> round(1.1135,3) # 取3位小数,由于3为奇数,则向下“舍”
1.113
format使用
>>> print('{} {}'.format('hello','world')) # 不带字段
hello world
>>> print('{0} {1}'.format('hello','world')) # 带数字编号
hello world
>>> print('{0} {1} {0}'.format('hello','world')) # 打乱顺序
hello world hello
>>> print('{1} {1} {0}'.format('hello','world'))
world world hello
>>> print('{a} {tom} {a}'.format(tom='hello',a='world')) # 带关键字
world hello world
>>> print('{} is {:.2f}'.format(1.123,1.123)) # 取2位小数
1.123 is 1.12
其他格式:(直接在字符串前面加f来快速格式化)
name = 'qianfeng'
age = 18
sex = 'man'
job = "IT"
salary = 9999.99
print(f'my name is {name.capitalize()}.')
print(f'I am {age:*^10} years old.')
print(f'I am a {sex}')
print(f'My salary is {salary:10.3f}')
# 结果
my name is Qianfeng.
I am ****18**** years old.
I am a man
My salary is 9999.990
常用处理小连招
对于多组数据读入丝滑小连招:
while True:
try:
data=list(map(int,input().strip().split()))
n,array=data[0],data[1:]
print(sum(array))
except EOFError:
break
二维处理
对于二维数组处理小连招:
首先是m行n列的二维数组。常见的如下:
L = [[] * n] * m
# 或者append方法
l = 0 #行从0开始
mat = [] # 定义一个二维数组mat
while l < m:
r = 0 #列从0开始
line = [] #line存储每一行数据
while r < n:
line.append(0) #装载行数据
r = r + 1
mat.append(line) #按行装载二维数组
l = l + 1
但是前者更改其中一行的值会导致每行的值都被更改。(对中间值引用了n次。故不推荐)
反转,旋转操作:
reversed = reversed(original)
rotated = list(zip(*original[::-1]))
rotated = list(map(list, zip(*a[::-1])))
对于BFS,使用队列结构。
# 1.使用queue
from queue import Queue
q = Queue() # 定义,为什么是这样涉及python的设计,不是很懂
q.put(node) # 放入
q.get() # 出队