【一遍就会】Python关于ACM输入输出格式(力扣、牛客、秋招笔试刷题通用)

输入格式

1.Python的输入是字符串,所以要自己转类型
2.strip去掉左右两端的空白符,返回str
3.slipt把字符串按空白符拆开,返回[str]
4.map把list里面的值映射到指定类型,返回特定需要类型[type]

- map() 经常与内置函数如 int()、str() 等一起使用,以转换数据类型。
input_string = "1 2 3 4 5"
numbers = map(int, input_string.split()) # 将每个元素转成int
print(list(numbers))  # 输出:[1, 2, 3, 4, 5]

input方式

多行输入,并指定行数:

'''多行输入,指定行数'''

n, m = map(int, input().strip().split())#获取第一行,获取第二行可以再写一句同样的语句
#需要矩阵承接数据时
data = []
for i in range(n):
	tmp = list(map(int, input().split()))
	data.append(tmp)

多行输入,不指定行数

'''多行输入,不指定行数'''
try:
	data = []
	while True:
		line = input().strip() #strip去除左右两边的空白符
		if line == ' ':
			break
		tmp = list(map(int, line.split())) #split按空白符拆开
		data.append(tmp)
expect:
	pass

sys.stdin.readline()方式

如果使用该语句,默认是读取的字符串+’\n’
为了去除末尾’\n’的影响,可以使用strip()
strip()用于去除字符串首尾的字符,默认是空格、\n、\t ,且只能去除首尾的
即:把input 换成sys.stdin.readline()
Ps:注意导包 sys

import sys
try:
    lis=[]
    while True: # 一直输入知道输入为空
        line=sys.stdin.readline().strip()
        if line =='':
            break
        lines=list(map(int,line.split()))
        lis.append(lines)
    print(lis)
except:
    pass

做题常用套餐

List

#初始化
l = [0] * len(array)
l=[]

#从后往前访问
l[-1]表示最后一个数
for i in range(0, -10, -1)     #0, -1, -2, -3, -4, -5, -6, -7, -8, -9
for j in reversed(range(len(nums)-1)) #加一个reverse可以直接颠倒

#enumerate 枚举
l = ["a", "b", "c"]
for i, v in enumerate(l):
    print(i, v)
#0 a
#1 b
#2 c 

#map
#可以将参数一一映射来计算, 比如
date = "2019-8-15"
Y, M, D = map(int, date.split('-'))    #Y = 2019, M = 8, D = 15
#map返回的是迭代对象而不是一个列表,要转成列表要加list


#sort
1.调用sort()排序,不会产生新的列表。lst.sort()升序排序
降序排序lst.sort(reverse=True)  升序排序lst.sort()
2.使用内置函数sorted()排序,会产生新的列表对象
lst1=sorted(lst)升序排序   lst2=sorted(lst,reverse=True)降序排序
l1 = [(1,2), (0,1), (3,10) ]
l2 = sorted(l1, key=lambda x: x[0])#按照 tuple 的第一个元素进行排序key允许传入一个自定义参数
# l2 = [(0, 1), (1, 2), (3, 10)]
#排序默认从小到大。可以用reverse=True倒序

#列表生成式 
lst = [i*j for i in range(1,10)]




#ZIP
x = [1, 2, 3]
y = [4, 5, 6]
zipped = zip(x, y)
list(zipped)#[(1, 4), (2, 5), (3, 6)]
```keys(), values(), items()
这三个方法可以分别获得key, value, {key: value}的数组。

#max可以代替if来更新更大的数
maxnums=max(maxnums,tmp)

#多维数组
res = [[], []]
res[0].append()

#extend一次性添加多个元素
lst1.extend(lst2)
#insert在i位置添加x
lst.insert(i, x)


List删除操作:

在这里插入图片描述

emove()括号里面不是索引,是具体的数
Pop()括号里面是索引号,索引从1开始

Str字符串

ord('a')# 返回单个字符的 unicode:
chr(100)# 返回'd'

#strip和split
'   spacious   '.strip()#strip()移除 string 前后的字符串,默认来移除空格
'1,2,3'.split(',') #['1', '2', '3'],按照某个字符串来切分,返回一个 list,
'1,2,3'.split(',', maxsplit=1)#['1', '2,3'],传入一个参数maxsplit来限定分离数

#将字符串和列表相互转换
字符串转换成列表,注意交换字符需要先转换成列表
#1.list
str1 = '12345'
list1 = list(str1)
print(list1) #['1', '2', '3', '4', '5']
#2.str.split()通过指定分隔符对字符串进行切片
str3 = 'this is string example'
list3 = str3.split('i', 1)
print(list3) #['th', 's is string example']

列表转换成字符串,join里面的可以是listset
#1.split.join(str),split是指定的分隔符,str是要转换的字符串
list1 = ['1', '2', '3', '4', '5']
str1 = "".join(list1)#12345 

list3 = ['www', 'baidu', 'com']
str3 = ".".join(list3)#www.baidu.com

#是元音
def isVowel(ch:str) -> bool:
            return ch in "aeiouAEIOU"
isVowel(s[i])


Set集合(去重)

add : set 的添加是 add 不是append,一次添加一个元素
update:一次添加多个元素

remove vs discard: 都是删除操作,都是删除指定值,区别在于remove不存在的元素会报错,discard不会。
pop:一次删除任意元素

union, intersection: 快速获得并集和交集,方便一些去重操作。
s1.intersection(s2)innot in来判断

Dict 字典

字典,相当于其它语言中的map, hashtable, hashmap之类的

keys(), values(), items()这三个方法可以分别获得key, value, {key: value}的数组。

#遍历Key
for key in dict:
	print(key)

#遍历value:
for value in dict.values():

#遍历key,value
for key, value in dict.items():


运算

  1. 最大, 最小 number
    • 在 python 中分别以 float(‘inf’) 和 float(‘-inf’)表示最大最小值
  2. 整除和次方
3 / 2 # 1.5

3 // 2  # 1 整除
# 次方

2 ** 10 # 1024

pow(x,y)  x的y次方

  1. 其他函数:
round(x):四舍五入
abs(x)/max()/min():绝对值/最大值/最小值
range(start=0, stop, step=1]):返回一个可迭代对象,常用于for循环
pow(x, y, [z]):求幂函数x^y,运算完毕可以顺带对z取模
sorted(iterable, key, reverse):采用Timsort的稳定排序算法,默认升序
int(x, base=10))/float()/str():转整数(可自定义进制)/转浮点数/转字符串
bin()/oct()/hex()10进制转二进制(返回0b开头的字符串)/10进制转八进制(返回0开头的字符串)/10进制转十六进制(返回0x开头的字符串)
ord()/chr():字符转ASCII或ASCII转字符
math.gcd(x,y):返回x和y的最大公约数

if ……elif……else注意不要用else if 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值